首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中连接字节数组而不是System.arrayCopy()方法

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

Stack Overflow用户
提问于 2016-04-11 00:20:33
回答 1查看 522关注 0票数 0

我正在尝试解压缩一个大小约为1 GB的大文件,但我无法使用文件输出流方法。我的最后一个文档需要解压缩文件的字节数组来创建一个新文件。现在,我已经手动增加了每次读取的数组大小。但是这对于大文件来说太慢了。我有没有办法在这种方法中获得效率。

代码语言:javascript
复制
      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);

  }
EN

回答 1

Stack Overflow用户

发布于 2016-04-11 00:24:58

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

ByteArrayOutputStream和您在这里编写的代码之间的一个区别是,典型的实现是后备数组大小的两倍,这意味着写入n个字节的时间复杂度为O(n)。如果你像这里这样以固定的增量增长数组,你将得到O(n^2)的时间复杂度。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36532281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档