我正在尝试调试一个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());
}
答案 0 :(得分:1)
如果二进制值为“101”,则必须将其填充为“00000101”,假定为8位值。
添加前导零不会更改该值,但是需要它以使数字占用整个8位。这需要确保存储在其旁边的值将在字节的开头对齐。