有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

outputstream java,使用DataOutputStream写入数据大小

我有一系列通过DataOutputStream将数据写入文件的对象

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

为了做到这一点,我需要在objects数据前面加上一个size值,该值指示当前对象将占用的字节数

然而,由于这些数据的大小可以是可变的,尤其是在处理字符串时,我无法事先知道数据的大小

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


共 (1) 个答案

  1. # 1 楼答案

    正如您所看到的here,您可以这样使用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));
        }