Java 最好使用ObjectOut/InputStream或InputStreamReader/BufferedReader?

Java 最好使用ObjectOut/InputStream或InputStreamReader/BufferedReader?,java,networking,Java,Networking,因此,我使用InputStreamReader、BufferedReader和PrintWriter制作了一个聊天应用程序 我想知道: 使用ObjectInputStream和ObjectOutputStream是否更有效/更好?然后我可以通过客户端信息发送对象,而不仅仅是字符串,对吗 如果是,我应该如何处理接收对象?因为它可能是字符串,也可能是我正在发送的客户机对象等。使用ObjectInputStream/ObjectOutputStream将是一种不好的做法,因为以下两个原因: 如果同时使

因此,我使用InputStreamReader、BufferedReader和PrintWriter制作了一个聊天应用程序

我想知道:

使用ObjectInputStream和ObjectOutputStream是否更有效/更好?然后我可以通过客户端信息发送对象,而不仅仅是字符串,对吗


如果是,我应该如何处理接收对象?因为它可能是字符串,也可能是我正在发送的客户机对象等。

使用ObjectInputStream/ObjectOutputStream将是一种不好的做法,因为以下两个原因:

如果同时使用两个版本的聊天程序,并且每个版本使用另一个版本的序列化类,序列化对象会带来兼容性问题。 序列化对象包含大量元数据将对象保存到一个文件中,并查看没有功能意义的内容,因此您将发送大量无意义的数据。 如果要在不同的聊天应用程序之间发送对象结构,请使用Jackson和:

将发送的任何对象转换为字符串 将收到的任何字符串转换回对象 在互联网上搜索如何使用Jackson,这是我看到的第一个链接之一:

@AndyTurner那不是我,我不知道为什么有人复制并粘贴我的问题,对不起。这个问题现在已被版主删除。当然,元数据具有功能意义。否则它就不会在那里了。元数据并不包含在每个序列化对象中:它是单独发送的,每个类发送一次。这不是“无意义的”。好的,非常感谢。我假设我的PrintWriter和BufferedReader工作得足够好。@EJP如果元数据具有功能意义,那么Jackson为什么不需要它?我认为,如果您希望通过Internet发送对象,那么最好将其作为任何编程语言都可以理解的JSON对象,而不是作为只有JVM才能理解的带有技术元数据的Java序列化对象。