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

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();

}