【发布时间】:2020-02-16 10:33:58
【问题描述】:
以下代码为两个字符串生成确定性(shasum 相同)的文件。
try(
FileOutputStream fos = new FileOutputStream(saveLocation);
GZIPOutputStream zip = new GZIPOutputStream(fos, GZIP_BUFFER_SIZE);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(zip, StandardCharsets.UTF_8));
){
writer.append(str);
}
生产:
a.gz f0200d53f7f9b35647b5dece0146d72cd1c17949
但是,如果我在命令行上获取文件并重新压缩它,它会产生不同的结果
> gunzip -n a.gz ;gzip -n a ; shasum a.gz
50f478a9ceb292a2d14f1460d7c584b7a856e4d9 a.gz
如何使用 /usr/bin/gzip 和 gunzip 使其与原始 sha 匹配?
【问题讨论】:
-
文件大小如何,是否匹配?
-
您必须匹配 compression level 并且您可能需要匹配缓冲区大小(我不能 100% 确定第二点)。
-
尝试将
-1或-9添加到gzip命令,看看是否有任何改变。 -
我检查了压缩级别,但这在任何级别上都不起作用。文件大小匹配良好。
-
@ergonaut 请提供其余代码(例如,
str的来源)。
标签: java sha gzipoutputstream