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

时间:2015-02-13 09:23:25

标签: java zip

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

  1. 这是预期的行为
  2. 有一种方法可以始终产生完全相同的结果
  3. 这是我目前的代码:

        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();
    }
    

1 个答案:

答案 0 :(得分:2)

字节10启动文件修改日期,因此总是会有所不同。有关zip文件格式的详细信息,请参阅Wikipedia