如何使用java.util.GZIPOutputStream或任何其他文件将多个记录存储为单个文件,其中每个记录单独压缩?

如何使用java.util.GZIPOutputStream或任何其他文件将多个记录存储为单个文件,其中每个记录单独压缩?,java,Java,如何使用java.util.GZIPOutputStream或任何其他文件将多个记录存储为单个文件,其中每个记录单独压缩 这是为单个记录查找文件所必需的,并且仅解压该记录 我读过HBase对hfile做同样的事情。但是我在单个文件中遇到了记录方面的问题。使用java.util.zip.zipoutpstream。在写入新的“记录”之前,调用ZipOuputStream.putnextry以指示要写入下一条记录,并传入一个ZipEntry作为参数,其中包含要为下一条记录设置的文件名。对每条记录使用

如何使用java.util.GZIPOutputStream或任何其他文件将多个记录存储为单个文件,其中每个记录单独压缩

这是为单个记录查找文件所必需的,并且仅解压该记录

我读过HBase对hfile做同样的事情。但是我在单个文件中遇到了记录方面的问题。

使用java.util.zip.zipoutpstream。在写入新的“记录”之前,调用ZipOuputStream.putnextry以指示要写入下一条记录,并传入一个ZipEntry作为参数,其中包含要为下一条记录设置的文件名。

对每条记录使用with


您应该能够在需要时提取特定的记录,而不必解压缩整个文件。

还有其他选择吗。。。。我有10-20个文件,总大小为25-30 MB,没有压缩邮件大小限制。我还没有测试过这个,但得到了一些信息,因为它将是约50%的速度比正常写入。我需要速度以及良好的压缩。我仍然需要使用java.util.zip.ZipOutputStream测试读写性能。感谢您提出的宝贵建议。在您提出建议之前,我认为应该像HBase对其HFileStore文件所做的那样进行应用。其中文件格式为:DATA1 DATA2 DATA3…|元数据|预告片。其中数据1,数据2。。。是我的邮件和元的不同部分将持有每个数据开始位置的偏移量。单个拖车是一个长值,它将保持整个起动位置的偏移量。我有一个程序,可以轻松地写/读单个邮件的内容。但必须对每个数据进行压缩。除了Meta和Trailer。在多个GziOutputStreams的输出之间添加一些边界帧应该不会太难-特别是如果您知道未压缩数据的长度,您可以在数据之前写入文件中下一节的长度,当您读回数据时,请确保GZipInputStream只能读取这么多字节-通过将您自己的FilterInputStream子类传递给它,该子类读取的字节数不会超过该字节数,然后假装文件结束。嗨,欧文,我想以以下格式将多个文件存储到单个文件中:File1 | File2 | File3…| Meta | traile where Fiile1,File2。。。是指各文件的内容和元数据保存版本、文件数、文件名长度、文件名、偏移量、每个文件的大小,以及拖车保存元数据开始的偏移量。我可以合并并读取普通文件。但是我不明白如何使用gziputputstream/gziputputstream。如果你能给我一些示例/框架代码,那么对我来说会更好。谢谢…谢谢Manvendra。。。有没有其他方法可以实现快速读/写以及良好的压缩。我必须使用它将单个邮件存储为单个压缩文件。每封邮件平均10-20个不同的区块/内容,总大小约为30 MB。