简体   繁体   English

更好地使用ObjectOut / InputStream或InputStreamReader / BufferedReader?

[英]Better to use ObjectOut/InputStream or InputStreamReader / BufferedReader?

So I made a chat application using InputStreamReader , BufferedReader and PrintWriter . 因此,我使用InputStreamReaderBufferedReaderPrintWriter制作了一个聊天应用程序。

I'm wondering: 我很好奇:

Would it be more efficient / better practice to use an ObjectInputStream and ObjectOutputStream ? 使用ObjectInputStreamObjectOutputStream会更有效/更好吗? Then I could send objects through like client information (not just Strings), right? 然后我可以通过客户信息(不仅是字符串)发送对象,对不对?

If so, how should I handle receiving an object? 如果是这样,我应该如何处理接收物体? (Because it could be a String or it could be a Client object I'm sending) etc. (因为它可能是一个String或它可能是我正在发送的Client对象)等。

It would be a bad practice to use ObjectInputStream/ObjectOutputStream, because of the following 2 reasons: 由于以下两个原因,使用ObjectInputStream / ObjectOutputStream是不好的做法:

  • serializing objects introduces compatibility issues if you are using 2 versions of the chat program at the same time and each version uses another version of the serialized classes. 如果您同时使用2个版本的聊天程序,并且每个版本都使用序列化类的另一个版本,则序列化对象会引起兼容性问题。
  • serialized object contain a lot of metadata (save an object to a file and take a look) that has no functional meaning, so you would be sending a lot of "meaningless" data. 序列化的对象包含许多没有功能含义的元数据(将对象保存到文件中并进行查看),因此您将发送很多“无意义”的数据。

If you want to send object structures between your different chat applications, use Jackson ( https://github.com/FasterXML/jackson ) and: 如果要在不同的聊天应用程序之间发送对象结构,请使用Jackson( https://github.com/FasterXML/jackson )并:

  • convert any object you send to a String 将您发送的任何对象转换为字符串
  • convert any String you receive back to an object 将收到的任何字符串转换回对象

Search the Internet how to use Jackson, this is one of the first links that showed up for me: https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/ 在Internet上搜索如何使用Jackson,这是为我显示的第一个链接之一: https : //www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Mocking InputStream、InputStreamReader 和 BufferedReader - Mocking InputStream, InputStreamReader and BufferedReader 释放由BufferedReader,InputStreamReader和InputStream获取的资源 - Releasing resources acquired by BufferedReader, InputStreamReader and InputStream 将getResourceAsStream用于BufferedReader和InputStream - The use of getResourceAsStream for BufferedReader and InputStream InputStream、InputStreamReader 和 BufferedReader 如何在 Java 中协同工作? - How do an InputStream, InputStreamReader and BufferedReader work together in Java? 如何重置BufferedReader(或InputStreamReader)以两次使用readline()? - How to reset BufferedReader (or InputStreamReader) to use readline() twice? 缓冲读取器或输入流读取器中的gc开销 - gc overhead in bufferedreader or inputstreamreader 关闭BufferedReader和InputStreamReader - Closing BufferedReader and InputStreamReader Java中的BufferedReader和InputStreamReader - BufferedReader and InputStreamReader in Java 读取所有字符时,是否有理由在InputStreamReader上使用BufferedReader? - Is there a reason to use BufferedReader over InputStreamReader when reading all characters? InputStream 和 BufferedReader - InputStream and BufferedReader
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM