我对ObjectOutputStream的行为感到困惑。写入数据时似乎有9字节的开销。请考虑下面的代码:
数组的长度始终为781,而我预期它应该是(1 + 96 + 96)* 4 = 772个字节。我似乎找不到这9个字节的去向。
谢谢!
--编辑:添加if(oos!= null){ ... }以防止NPE
float[] speeds = new float[96];
float[] flows = new float[96];
//.. do some stuff here to fill the arrays with data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos=null;
try {
oos = new ObjectOutputStream(baos);
oos.writeInt(speeds.length);
for(int i=0;i<speeds.length;i++) {
oos.writeFloat(speeds[i]);
}
for(int i=0;i<flows.length;i++) {
oos.writeFloat(flows[i]);
}
oos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(oos!=null) {
oos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
byte[] array = baos.toByteArray();
数组的长度始终为781,而我预期它应该是(1 + 96 + 96)* 4 = 772个字节。我似乎找不到这9个字节的去向。
谢谢!
--编辑:添加if(oos!= null){ ... }以防止NPE
ObjectOutputStream
不是一个好的解决方案。此外,在 Java SE 7 中可以使用try (Type resource = acquire()) { use(); }
或者acquire(); try { use(); } finally { release(); }
。你可能会遇到潜在的 NPE 问题,以及糟糕的错误处理。 - Tom Hawtin - tackline