Java - 可以修改和解析gzip压缩文件而不解压缩吗?

时间:2017-11-16 00:04:01

标签: java xml gzip

我有一个gzip压缩文件的arraylist。是否可以查看和操作这些xml文件的内容,而无需解压缩并占用磁盘空间?如果是这样,那么用于此任务的正确类是什么?

我知道我可以从zip文件的fileinputstream创建一个gzipinputstream但是从那里我不知道该怎么做。我只写了这个:

 GZIPInputStream in = new GZIPInputStream(new FileInputStream(zippedFiles.get(i)));

我需要一些方法来解析xml文件中的文本并修改xml本身,但是再次提取所有这些文件会占用太多的磁盘空间。

2 个答案:

答案 0 :(得分:1)

你到底想要达到什么目的?您可以使用ByteArrayOutputStream将文件解压缩到内存中,并将其转换为转发到XML解析器库的字节数组(将其转换为String并传递不建议使用,因为在XML文件中指定了编码因此,必须由内部的XML解析器完成对String的转换。大多数XML解析器也支持直接从任何InputStream读取,因此您可以直接将它传递给它,这可能会进一步减少您的内存消耗。只需反转所述过程,只有在将数据写回数据库时才会占用磁盘空间。但是,当您通过覆盖直接替换源文件时,无处浪费任何磁盘空间。

答案 1 :(得分:0)

他们在列表中的事实并没有太大改变,但没有。

忽略压缩,文件以线性方式存储在磁盘上。你可以便宜地追加它们,你可以便宜地替换字节,但你不能替换不同长度的序列(如replace("Testing Procedure Specification", "TPS"))而不需要在修改后的子字符串后重写文件。

Gziping文件会使事情变得复杂,但同样的规则也适用。通常,对文件进行任意修改需要重写文件。

读取文件的代码是正确的。您可以轻松地将gziped文件作为流读取,而无需解压缩整个文件。