【发布时间】:2020-04-26 21:39:20
【问题描述】:
使用 ByteArrayOuputStream 输出的 Zip 文件比使用 FileOutputStream 小。
在 Java 中,我正在创建一个 Zip 文件。当我使用 FileOutputStream 时,它会成功打开。
将 FileOutputStream 切换到 ByteArrayOutputStream 时,我得到一个稍微小一点的文件,大约 221 个字节。而且这个文件不会打开,但是和另一个文件的内容相同,但是少了 221 个字节。
我用于构建 Zip 文件的逻辑在这两种情况下都是相同的。因此,我将在不创建 zip 的情况下分享基本逻辑(如果您需要,请告诉我)。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
zipOS = new ZipOutputStream(baos);
然后我创建 Zip 文件,然后...
zipOS.flush();
baos.flush();
baos.writeTo(new FileOutputStream("TEST_AS_BYTESTREAM_1.zip"));
zipOS.close();
baos.close();
我正在使用 baos.writeTo() 绕过这个以证明问题不是 HTTP 响应而是 ByteArrayOutputStream 元素。
当使用baos.writeTo(new FileOutputStream("TEST_AS_BYTESTREAM_1.zip"));
我得到一个不以 Zip 格式打开的较小文件。
这个逻辑在 java 控制器中,因此点击网页上的链接将下载 zip 文件,而不会触及除用户之外的任何文件系统。
这是使用 FileOutputStream 的代码...
FileOutputStream baos = new FileOutputStream("TEST_AS_FILE.zip");
zipOS = new ZipOutputStream(baos);
除了第二个代码 sn-p 不相关,因为我需要发送在 Web 服务器上创建的文件。但重点是,同样逻辑的Fileoutput流和ByteArrayOutputStream是有区别的。
【问题讨论】:
-
你应该关闭
zipOS之前获取baos的内容。
标签: java zip fileoutputstream bytearrayoutputstream