Search code examples
javaserializableobjectoutputstream

Serializable ObjecOutputStream object


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


Solution

  • 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);
    }