[英]java, writing data size with DataOutputStream
我有一系列对象,它们通过 DataOutputStream 将数据写入文件。
随着我的应用程序文件格式的发展,我将向其中添加更多数据对象,这些对象应该能够被“旧”版本的应用程序读取。
为了能够做到这一点,我需要在对象数据前面加上一个大小值,该值指示当前对象将占用的字节数。
但是,由于这些数据的大小可能是可变的,特别是在处理字符串时,我无法事先知道大小是多少。
有没有办法“预写”到字节缓冲区,就好像它是一个 DataOutputStream (特别是方法 - writeByte, writeShort, writeInt, writeUTF ),这将使我能够在写入之前取回数据的字节长度到 DataOutputStream ? 这样做将使我能够跳过旧版本应用程序可以理解的新数据对象。
正如你在这里看到的,你可以这样使用java.lang.instrument.Instrumentation
:
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
然后计算对象的大小(以字节为单位):
public static void main(String [] args) {
Object myObject = ...;
System.out.println(ObjectSizeFetcher.getObjectSize(myObject));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.