gpt4 book ai didi

java - 使用 ZipOutputStream 压缩文件会产生不一致的结果

转载 作者:行者123 更新时间:2023-12-02 04:58:50 27 4
gpt4 key购买 nike

我想使用 java.util.ZipOutputStream 类压缩文本文件。我在互联网上找到了两个示例来解释如何做到这一点。这使我想到了如下所示的两种可能的实现。虽然这两种方法都会生成“健康的 zip 文件”,但我的问题是每次运行时文件的二进制内容都略有不同(大约第 10 个字节)。有人知道吗

  1. 这是预期行为
  2. 有一种方法可以始终产生完全相同的结果

这是我当前的代码:

    public byte[] getZipByteArray(String fileName) throws IOException
{
byte[] result = new byte[0];
byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
ZipEntry ze = new ZipEntry(fileName);
zos.putNextEntry(ze);
InputStream inputStream = ZipCompression.class.getResourceAsStream(fileName);

int len;
while ((len = inputStream.read(buffer)) > 0)
{
zos.write(buffer, 0, len);
}
zos.closeEntry();
zos.close();
result = baos.toByteArray();
return result;
}

public byte[] ZipByteArrayBuffered(String fileName) throws IOException
{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);

File file = new File(fileName);
InputStream fileInputStream = ZipCompression.class.getResourceAsStream(file.getName());
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));

IOUtils.copy(fileInputStream, zipOutputStream);

fileInputStream.close();
zipOutputStream.closeEntry();

if (zipOutputStream != null)
{
zipOutputStream.finish();
zipOutputStream.flush();
IOUtils.closeQuietly(zipOutputStream);
}
IOUtils.closeQuietly(bufferedOutputStream);
IOUtils.closeQuietly(byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}

最佳答案

字节 10 开始文件修改日期,因此这总是不同的。请参阅Wikipedia了解 zip 文件格式的详细信息。

关于java - 使用 ZipOutputStream 压缩文件会产生不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com