我已成功使用ObjectOutputStream和ObjectInputStream来序列化和反序列化我正在编写的服务器和客户端的对象。服务器和客户端通常在两台不同的机器上,但由于它将是一个基于回合的纸牌游戏,我也希望用户在本地玩,然后客户端和服务器都将在同一台机器上运行。
现在,我正在编写连接接口的替代实现。该接口包含void sendToServer(Object)和Object receiveFromServer()
等方法通常sendToServer(Object)函数只是通过ObjectOutputStream发送对象,但由于对象在同一台机器上,我可以创建一个对象队列,并在每次调用发送或接收时进行推送和弹出。但问题是,我不希望客户端引用服务器使用的对象,我希望它是一个副本。我没有复制构造函数,并且对象不可复制。
在我的情况下你会做什么?
答案 0 :(得分:4)
看看ByteArrayInputStream和ByteArrayOutputStream。使用它们将对象序列化到内存中并从中取回它们。
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bOut);
out.writeObject(new Jedi("Obiwan"));
out.close();
byte[] payload = bOut.toByteArray();
ByteArrayInputStream bIn = new ByteArrayInputStream(payload);
ObjectInputStream in = new ObjectInputStream(bIn);
Jedi jedi = (Jedi) in.readObject();
in.close();
System.out.println(jedi);
在这种情况下,您可以使用内存结构来放置字节,而不是通过网络发送它们。
我希望有所帮助!
答案 1 :(得分:0)
通常sendToServer(Object)函数只发送对象 通过ObjectOutputStream,但由于对象是相同的 机器,我可以创建一个对象队列,并推送和弹出每个 调用发送或接收的时间......
但这导致了你所描述的所有问题。那为什么要做什么呢?保持原样。