使用Java将大文件(> 5GB)输出到.zip存档

时间:2013-04-25 21:07:33

标签: java jaxb compression

我正在尝试使用大约6GB的大型制表符分隔的.txt文件,并使用JAXB API将其转换为.xml文件。这部分工作正常,但是当我尝试使用ZipOutputStream将.xml放入.zip时,.xml在我尝试查看之后就会被破坏(但它适用于较小的文件)。

还有其他方法可以做到这一点,还是在进程运行后手动进行压缩会更好?下面是我在尝试制作.zip文件时使用的一些代码。

IFSFile source = null;
IFSFileOutputStream target = null;
ZipOutputStream targetZip = null;

String targetName = "C:/test.zip";

source = new IFSFile(as400, sourceName);
BufferedReader readBuffer = new BufferedReader(new IFSFileReader(source));

target = new IFSFileOutputStream(as400, targetName, IFSFileOutputStream.SHARE_NONE, false);
targetZip = new ZipOutputStream(target);

ZipEntry ze = new ZipEntry("test.xml");
targetZip.putNextEntry(ze);

//JAXB stuff omitted, seems to be working as no problems with smaller files
while ((strRead = readBuffer.readLine()) != null) {
    currentRecord = new stuff;
    marshaller.marshal(currentRecord, targetZip);
}

targetZip.closeEntry();
targetZip.close();
readBuffer.close();

在寻找大小限制时,我发现如果.zp最终大于4GB会损坏,我认为不会。我做错了什么,或者我应该使用ZipOutputStream以外的东西吗?

2 个答案:

答案 0 :(得分:2)

使用GZIPOutputStream代替它,它是java.util的一部分(如此标准),并且在(AFAIK)所有情况下都有更好的压缩,并且肯定会处理大于4Gb的文件。

我认为ZipOutputStream可能不是ZIP64的实现,如果是这样,原始ZIP格式有4Gb限制,因为这是32位文件系统的最大值。

答案 1 :(得分:0)

我认为4gb是java设置的限制你试试java 7吗?我读过这也可能是java中的错误。请检查truezip