I want to make server client aplication and use ObjecOutputStream to send Object to client, but in object which I want to send is ObjectOutputStream object and I need to serializable it somehow but I dont know how... any advice?
I need to send object Player:
public class Player implements Serializable{
ObjectOutputStream out;
public Player(ObjectOutputStream out){
this.out = out;
}
public send(){
this.out.writeObject(this);
}
}
after launch similar code like this an exeption show this:
java.io.NotSerializableException: java.io.ObjectOutputStream
Since ObjectOutputStream
doesn't implement Serializable
, so your Player
class cannot be serialized. To fix it:
class Player implements Serializable {
private transient ObjectOutputStream out;
// the rest
}
In my opinion, the Player
should not know how to send itself. You can introduce a new class 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);
}