gpt4 book ai didi

java - 如何在java中连接字节数组而不是System.arrayCopy()方法

转载 作者:行者123 更新时间:2023-12-01 21:40:27 27 4
gpt4 key购买 nike

我正在尝试解压缩大约 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);

}

最佳答案

将您的数据写入 ByteArrayOutputStream 。它包装一个字节数组并在需要时调整它的大小。完成后,调用 toByteArray 返回字节。

ByteArrayOutputStream 与您在此处编写的内容之间的一个区别是,典型的实现将支持数组的大小加倍,这意味着写入 n 个字节具有 O(n) 摊销时间复杂度。如果像这里一样按固定增量增长数组,您将获得 O(n^2) 时间复杂度。

关于java - 如何在java中连接字节数组而不是System.arrayCopy()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com