Сериализуемый объект Objectoutputstream
Я хочу сделать клиентское приложение сервера и использовать Objectoutputstream для отправки объекта клиенту, но в объекте, который я хочу отправить, объект ObjectOutputStream, и мне нужно сериализовать его как-то, но я не знаю, как... какой-нибудь совет?
Мне нужно отправить object Player:
public class Player implements Serializable{
ObjectOutputStream out;
public Player(ObjectOutputStream out){
this.out = out;
}
public send(){
this.out.writeObject(this);
}
}
После запуска подобного кода exeption покажет следующее:
Ява.Ио.NotSerializableException: Ява.Ио.Методы objectoutputstream
2 ответа:
Так как
ObjectOutputStreamне реализуетSerializable, то ваш классPlayerне может быть сериализован. Чтобы исправить это:class Player implements Serializable { private transient ObjectOutputStream out; // the rest }На мой взгляд,
Playerне должен знать, как отправить себя. Вы можете ввести новый классPlayerSender:class PlayerSender { private ObjectOutputStream outputStream; public PlayerSender(OutputStream out) { this.outputStream = new ObjectOutputStream(out); } public void send(Player player) { this.outputStream.writeObject(player); } } //---- Usage ---- List<Player> players = // make a bunch of players; PlayerSender playerSender = new PlayerSender(getNetworkStream()); //PlayerSender playerSender = new PlayerSender(new FileOutputStream("/players/list.txt"); //PlayerSender playerSender = new PlayerSender(socketConnection.getOutputStream()); for (Player player : players) { playerSender.send(player); }
Вот код, который может помочь
public void toTXT(String fileName) { try { // Serialize data object to a file ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName)); out.writeObject(player); // player is an instance of Player class out.close(); } catch (Exception e) { } }Это правильный способ написания кода:
public class Player implements Serializable{ public Player(){ } public ObjectOutputStream send(){ ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("filename.txt")); this.out.writeObject(this); return out; } }А вот ваша
main()функция:public static void main(String args[]) { Player player = new Player(); player.send(); }