我有一系列对象,它们通过 DataOutputStream 将数据写入文件。
随着我的应用程序文件格式的发展,我将向其中添加更多数据对象,这些数据对象应该能够被应用程序的“旧”版本读取。
为了能够做到这一点,我需要在对象数据前面添加一个大小值,该值指示当前对象将占用的字节数。
但是,由于该数据的大小可以是可变的,特别是在处理字符串时,我无法事先知道大小是多少。
有没有一种方法可以“预写入”字节缓冲区,就好像它是一个 DataOutputStream (特别是方法 - writeByte、writeShort、writeInt、writeUTF),这将使我能够获得在将数据写入 DataOutputStream 之前返回数据的字节长度?这样做将使我能够跳过旧版本应用程序能够理解的新数据对象。
最佳答案
由于多种原因,常规 Java 序列化并不是那么好。最重要的问题之一是它非常脆弱,并且往往无法“面向 future ”。如果可能,我建议您使用不同的序列化格式,特别是如果您特别提到您计划向序列化的类添加字段。
格式如 Protobuf ,和JSON拥有具有良好 API 的 Java 库以及良好的前向/后向兼容性功能。在大多数情况下,将数据序列化为更方便的格式比解决现有问题要简单得多。
关于java,用DataOutputStream写入数据大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093714/