Java zip附加行

时间:2012-02-03 09:28:00

标签: java zip

是否可以有效地将一行添加到zip或gzip文件中?

我将股票市场数据直接存储到文件系统中,我有大约40个不同的文件,每5ms更新一次。

这是最好的方法吗?

5 个答案:

答案 0 :(得分:1)

使用数据库,而不是zip文件。

答案 1 :(得分:1)

  1. 建议使用数据库。
  2. 如果您真的想使用纯文本文件,请将它们直接放在文件系统上(如果您使用的是Linux,请为其选择合适的文件系统)。
  3. 如果您确实想使用纯文本文件并将文本文件放在zip文件中,请检查下面的zip文件系统:
  4. java.nio.file.FileSystems:
    http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfilesystemprovider.html

      

    Java SE 7发行版中引入的zip文件系统提供程序是自定义文件系统提供程序的实现。 zip文件系统提供程序将zip或JAR文件视为文件系统,并提供操作文件内容的功能。 zip文件系统提供程序创建多个文件系统 - 每个zip或JAR文件一个文件系统。

    TrueZip
    http://truezip.java.net/

      

    TrueZIP是一个基于Java的虚拟文件系统(VFS)插件框架,它提供对存档文件的透明访问,就好像它们只是普通的目录一样

    请记住:使用内存进行缓存,减少磁盘操作,并使写入无阻塞。

答案 2 :(得分:0)

编辑zip文件的完整周期(我的意思是read-modify-close)会产生太多的开销。我认为最好在内存中累积更改并以合理的速率修改目标文件(即每5秒甚至更多)。

答案 3 :(得分:0)

一种方法可能类似于compressing data sent over a socket,并且不时将压缩块刷新到磁盘。

答案 4 :(得分:0)

您可以使用ZipOutputStream的write方法写入给定的偏移量。

String filepath = new String("/tmp/updated.txt")
FileOutputStream fout = new FileOutputStream("/tmp/example.zip");
ZipOutputStream zout = new ZipOutputStream(fout);
byte[] file = IOUtils.toByteArray(mWriter.toString());
short yourOffset = 0;

ZipEntry ze = new ZipEntry(filepath);
try {
    zout.putNextEntry(ze);
    zout.write(file, yourOffset, file.length);
    zout.closeEntry();
} catch(Exception e) {
    e.printStackTrace();
}

如果使用Apache commons IOUtils(导入org.apache.commons.io.IOUtils)将文件转换为字节数组,则可以通过在要编辑的行的偏移​​处调用write来重写和替换zip条目开始。在这种情况下,它会写入整个文件,从0到file.length。您可以通过创建ZipEntry来替换zip中的文件,其中包含驱动器上更新文件的路径。

相关问题