Search code examples
javaziprandom-access

Writing a random access file transparently to a zip file


I have a java application that writes a RandomAccessFile to the file system. It has to be a RAF because some things are not known until the end, where I then seek back and write some information at the start of the file.

I would like to somehow put the file into a zip archive. I guess I could just do this at the end, but this would involve copying all the data that has been written so far. Since these files can potentially grow very large, I would prefer a way that somehow did not involve copying the data.

Is there some way to get something like a "ZipRandomAccessFile", a la the ZipOutputStream which is available in the jdk?

It doesn't have to be jdk only, I don't mind taking in third party libraries to get the job done.

Any ideas or suggestions..?


Solution

  • Maybe you need to change the file format so it can be written sequentially.

    In fact, since it is a Zip and Zip can contain multiple entries, you could write the sequential data to one ZipEntry and the data known 'only at completion' to a separate ZipEntry - which gives the best of both worlds.

    It is easy to write, not having to go back to the beginning of the large sequential chunk. It is easy to read - if the consumer needs to know the 'header' data before reading the larger resource, they can read the data in that zip entry before proceeding.