“最后的零位填充”是什么意思

时间:2014-06-06 07:19:06

标签: binaryfiles binary-data

我正在尝试调试一个3d文件格式导出器,它有时会导出无处不在的文件(有些程序会打开它们,而不是打开它们)。当我阅读文档时,似乎有一条线无法绕过我的脑袋:

  

6.4对象

     

每个部分中的对象被序列化为一个字节数组,一个   在另一个之后。这个字节数组将被压缩(如果   CompressionScheme是1)或它将是未压缩的。如果是   压缩后,它被压缩为单个数据块,而不是   单独的对象。 必须在最后填充零位才能生成   对象字段字节对齐。

可以在http://www.j2megame.org/j2meapi/JSR_184_Mobile_3D_Graphics_API_1_1/file-format.html

找到该文档

这是我正在使用的当前代码:

protected void write(M3GOutputStream os,ArrayList table) throws IOException
{
    ByteArrayOutputStream baos=new ByteArrayOutputStream();
    writeObjects(new M3GOutputStream(baos),table);
    uncompressedLength=baos.size();
    byte data[]=baos.toByteArray();
            if(!M3GToolkit.useZlibCompression)
            compressionScheme = UNCOMPRESSED;
    if (compressionScheme==ZLIB)
    {
        Deflater deflater=new Deflater(Deflater.BEST_COMPRESSION,false);
        deflater.setInput(data);
        deflater.finish();
        byte compressed[]=new byte[data.length<<1];
        int length=deflater.deflate(compressed);
        data=new byte[length];
        System.arraycopy(compressed,0,data,0,length);
        deflater.end();
    }
    os.resetAdler32();
    os.writeByte(compressionScheme);
    os.writeUInt32(totalSectionLength=data.length+13);
    os.writeUInt32(uncompressedLength);
    os.write(data);
    os.writeUInt32(checksum=(int)os.getAdler32Value());
}

1 个答案:

答案 0 :(得分:1)

如果二进制值为“101”,则必须将其填充为“00000101”,假定为8位值。

添加前导零不会更改该值,但是需要它以使数字占用整个8位。这需要确保存储在其旁边的值将在字节的开头对齐。