[英]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.