我有一个服务器应用程序和一个客户端应用程序,服务器上存在List
(特定的ArrayList
)。客户端向服务器发送一些信息,服务器修改List
的部分内容,并通过网络序列化将其发送给客户端。
首次完成此操作后,客户端会收到List
(或者它是原始文件的/副本?),但在此之后,客户端的List
永远不会更改服务器发送修改后的版本。服务器肯定会修改List
,因为在调试器中观察它会清楚地显示修改。
客户端代码就像
List<Type> fromServer = new ArrayList<>();
...
// send information
...
fromServer = (List<Type>) in.readObject();
和服务器端一样
List<Type> toClient = new ArrayList<>();
...
// get information from client
// add/modify list elements
...
out.writeObject(toClient);
其中in
和out
是套接字上的输入/输出流。
为什么会发生这种情况,我该怎么做才能解决这个问题?是否发生因为假设List
没有变化?谢谢你的关注!
答案 0 :(得分:1)
每当需要序列化同一对象的新版本时,您需要使用ObjectOutputStream.reset()
。
答案 1 :(得分:-1)
我建议您停止使用内置对象序列化。它有严重的缺点:
相反,我建议使用像Google Gson或json-io这样的库来使用JSON序列化。期望线上(或调试器中)的数据要容易得多,并确保您收到的数据符合您的预期。它还允许您向前和向后兼容,包括不同版本的Java和您自己的数据结构。