空ByteArrayOutputStream / ZipOutputStream = 22的长度?

时间:2017-01-06 13:43:54

标签: java

我对流大小有一点疑问。这是我的尝试:

ByteArrayOutputStream outStream = new ByteArrayOutputStream();
ZipOutputStream zipStream = new ZipOutputStream(outStream);
zipStream.close();
outStream.close();
System.err.println(outStream.toByteArray().length);

结果长度总是22.你能解释一下为什么吗? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

因为ZipOutputStream正在编写ZIP文件格式,并且ZIP文件格式包含始终存在的元数据,即使在空的zip文件中也是如此。具体来说,空zip只包含中央目录记录结束:

https://en.wikipedia.org/wiki/Zip_(file_format)#Limits

  

.ZIP文件的最小大小为22个字节。这样的空zip文件只包含一个中央目录记录(EOCD):   [0x50,0x4B,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]