Сериализуемый объект 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(); }