I have added a rather large patch that removed TarBuffer.java all together. It was unnecessary and added overhead and complexity. I substituted it out with just a regular BufferedInputStream/BufferedOutputStream. These changes pass all current unit tests.
There is one unit test to add, though I'm not sure how to do it. My implementation passed all unit tests but failed, in practice, on large TAR files. It's because my "skip" functions were not skipping as I had thought. Skipping a long distance is what brought out the problem, I would call "skip" once, and be done with it. With the small test files, it was able to skip it in one jump. For larger files, it required a while(skip() > 0) type of fix. I don't think you want to be shipping around a 1 gig file with your tests though.
Anyway, this implementation is much easier to read, less code, and runs a heck of a lot faster in some regards.
To read the names of all the entries:
The time in spend reading the entries and copying them out of the TAR was unchanged.
This will be very beneficial for Commons VFS. For example, in TarFileSystem#init(), it iterates through the TAR file and copies out the name of each entry. These patches will help that immensely.
For the record though, I have an SSD on my development machine, I don't know the benefit of a regular drive, but I imagine it will still be faster.
The full patch is "Archiver_Tar.patch". I have left the two other patches there for my own record.