java,用DataOutputStream写入数据大小

标签 java outputstream dataoutputstream

我有一系列对象,它们通过 DataOutputStream 将数据写入文件。

随着我的应用程序文件格式的发展,我将向其中添加更多数据对象,这些数据对象应该能够被应用程序的“旧”版本读取。

为了能够做到这一点,我需要在对象数据前面添加一个大小值,该值指示当前对象将占用的字节数。

但是,由于该数据的大小可以是可变的,特别是在处理字符串时,我无法事先知道大小是多少。

有没有一种方法可以“预写入”字节缓冲区,就好像它是一个 DataOutputStream (特别是方法 - writeByte、writeShort、writeInt、writeUTF),这将使我能够获得在将数据写入 DataOutputStream 之前返回数据的字节长度?这样做将使我能够跳过旧版本应用程序能够理解的新数据对象。

最佳答案

由于多种原因,常规 Java 序列化并不是那么好。最重要的问题之一是它非常脆弱,并且往往无法“面向 future ”。如果可能,我建议您使用不同的序列化格式,特别是如果您特别提到您计划向序列化的类添加字段。

格式如 Protobuf ,和JSON拥有具有良好 API 的 Java 库以及良好的前向/后向兼容性功能。在大多数情况下,将数据序列化为更方便的格式比解决现有问题要简单得多。

关于java,用DataOutputStream写入数据大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093714/

相关文章:

c - 如何在c中捕获所有输出文本

Java 服务器 - 如何从 InputStreamReader 获取输入并将其转换为字符串?

java - 使用套接字编程将数据从Java发送到C

java - 计算两个 Java Timestamp 对象之间耗时

Java改变对象属性值

c++ - 在 C++ 中,如何获取一个程序的输出并将其用作另一个程序的输入?

java - 检测 Java 中 OutputStream 的目标类型(文件/套接字/等)

java - 如何在socket编程中制作多条消息?

Java字符串和正则表达式匹配

java - 何时使用 SwingUtilities.invokeAndWait/invokeLater