我正在尝试解压缩一个大小约为1 GB的大文件,但我无法使用文件输出流方法。我的最后一个文档需要解压缩文件的字节数组来创建一个新文件。现在,我已经手动增加了每次读取的数组大小。但是这对于大文件来说太慢了。我有没有办法在这种方法中获得效率。
if (primaryDocumentInputStream != null) {
byte[] tempbuffer = new byte[536870912];
byte[] mainbuffer = new byte[536870912];
int lenMainBuffer = 0;
try {
int aIntBuffer = aGZIPInputStream.read(tempbuffer);
while (aIntBuffer > 0) {
byte[] copyBuffer = new byte[lenMainBuffer + aIntBuffer];
System.arraycopy(mainbuffer, 0, copyBuffer, 0, lenMainBuffer);
System.arraycopy(tempbuffer, 0, copyBuffer, lenMainBuffer, aIntBuffer);
mainbuffer = copyBuffer;
aIntBuffer = aGZIPInputStream.read(tempbuffer);
lenMainBuffer = mainbuffer.length;
}
primaryDocumentOutputDocument.setBody(mainbuffer);
wfc.putPrimaryDocument(primaryDocumentOutputDocument);
}发布于 2016-04-11 00:24:58
将数据写入ByteArrayOutputStream。它包装一个字节数组,并在需要时调整其大小。完成后,调用toByteArray将返回字节。
ByteArrayOutputStream和您在这里编写的代码之间的一个区别是,典型的实现是后备数组大小的两倍,这意味着写入n个字节的时间复杂度为O(n)。如果你像这里这样以固定的增量增长数组,你将得到O(n^2)的时间复杂度。
https://stackoverflow.com/questions/36532281
复制相似问题