Java 使用ZipOutputStream压缩文件会产生不一致的结果
我想使用java.util.ZipOutputStream类压缩文本文件。我在网上找到了两个例子来解释如何做到这一点。这使我想到了下面所示的两种可能的实现。虽然这两种方法都会生成“健康的zip文件”,但我的问题是,每次运行时,文件的二进制内容都略有不同(大约是第10个字节)。有人知道Java 使用ZipOutputStream压缩文件会产生不一致的结果,java,zip,Java,Zip,我想使用java.util.ZipOutputStream类压缩文本文件。我在网上找到了两个例子来解释如何做到这一点。这使我想到了下面所示的两种可能的实现。虽然这两种方法都会生成“健康的zip文件”,但我的问题是,每次运行时,文件的二进制内容都略有不同(大约是第10个字节)。有人知道 这是故意的行为 有一种方法总是产生完全相同的结果 这是我目前的代码: public byte[] getZipByteArray(String fileName) throws IOException {
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开始文件修改日期,因此这将始终不同。有关zip文件格式的详细信息,请参阅。感谢您给出了非常清晰的答案。当我在比较中忽略字节94和字节95时,在时间戳字节10->14旁边,结果总是相同的。我仍然想知道这两个字节是关于什么的,但那不那么重要。。。。。。