使用Java组合压缩的gzip文本文件
我的问题可能不完全与Java有关,但我目前正在寻找一种方法,可以组合几个压缩(gzip)文本文件,而无需手动重新压缩它们。假设我有4个文件,所有的文本都是用gzip压缩的,我想把它们压缩成一个单独的*.gz文件,而不需要对它们进行反压缩和重新压缩。我目前的方法是打开一个InputStream并逐行解析文件,存储在一个GziOutputStream中,它可以工作,但速度不是很快。。。。我当然也可以打电话使用Java组合压缩的gzip文本文件,java,gzip,zcat,Java,Gzip,Zcat,我的问题可能不完全与Java有关,但我目前正在寻找一种方法,可以组合几个压缩(gzip)文本文件,而无需手动重新压缩它们。假设我有4个文件,所有的文本都是用gzip压缩的,我想把它们压缩成一个单独的*.gz文件,而不需要对它们进行反压缩和重新压缩。我目前的方法是打开一个InputStream并逐行解析文件,存储在一个GziOutputStream中,它可以工作,但速度不是很快。。。。我当然也可以打电话 zcat file1 file2 file3 | gzip -c > outpu
zcat file1 file2 file3 | gzip -c > output_all_four.gz
这也行,但也不是很快
我的想法是复制inputstream并将其直接写入outputstream,而无需“解析”流,因为实际上我不需要操作任何东西。这样做可能吗?在下面找到一个简单的Java解决方案(它与我的
cat…
示例相同)。任何类型的输入/输出缓冲都被省略,以保持代码精简
public class ConcatFiles {
public static void main(String[] args) throws IOException {
// concatenate the single gzip files to one gzip file
try (InputStream isOne = new FileInputStream("file1.gz");
InputStream isTwo = new FileInputStream("file2.gz");
InputStream isThree = new FileInputStream("file3.gz");
SequenceInputStream sis = new SequenceInputStream(new SequenceInputStream(isOne, isTwo), isThree);
OutputStream bos = new FileOutputStream("output_all_three.gz")) {
byte[] buffer = new byte[8192];
int intsRead;
while ((intsRead = sis.read(buffer)) != -1) {
bos.write(buffer, 0, intsRead);
}
bos.flush();
}
// ungezip the single gzip file, the output contains the
// concatenated input of the single uncompressed files
try (GZIPInputStream gzipis = new GZIPInputStream(new FileInputStream("output_all_three.gz"));
OutputStream bos = new FileOutputStream("output_all_three")) {
byte[] buffer = new byte[8192];
int intsRead;
while ((intsRead = gzipis.read(buffer)) != -1) {
bos.write(buffer, 0, intsRead);
}
bos.flush();
}
}
}
如果您只需要gzip许多压缩文件,上述方法就可以工作。在我的例子中,我制作了一个web servlet,我的响应是20-30kbs。所以我发送了压缩响应 我尝试在ServerStart上压缩所有单独的JS文件,然后使用上述方法添加动态代码运行时。我可以在日志文件中打印整个响应,但chrome只能解压第一个文件。Rest输出以字节为单位 经过研究,我发现这在chrome上是不可能的,他们也在没有解决的情况下关闭了这个bug
使用
cat file1 file2 file3>output\u all\u three.gz怎么样?理论上:是的。实际上,很多工具会将输出视为单独的文件,这意味着它们不会以这种方式处理输出。你指的是哪种工具<代码>gzip
没有被愚弄,Java也没有被愚弄。这样使用gzip
是一个有效的例子。