我对ObjectOutputStream的行为感到困惑。写入数据时似乎有9个字节的开销。考虑下面的代码:

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个字节的位置。

谢谢!

--edit:添加了if(oos!= null){...}以防止NPE

最佳答案

ObjectOutputStream用于序列化对象。您不应该对数据的存储方式做任何假设。

如果您只想存储原始数据,请使用DataOutputStream代替。

09-26 06:00