首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java -文件到字节数组- Fast One

Java -文件到字节数组- Fast One
EN

Stack Overflow用户
提问于 2012-07-31 21:56:15
回答 2查看 17.8K关注 0票数 2

我想把一个文件读入一个字节数组。因此,我使用以下命令来阅读它:

代码语言:javascript
运行
复制
    int len1 = (int)(new File(filename).length());
    FileInputStream fis1 = new FileInputStream(filename);
    byte buf1[] = new byte[len1];
    fis1.read(buf1);

然而,它真的非常慢。谁能告诉我一个非常快的方法(可能是最好的方法)将一个文件读入字节数组。如果需要,我也可以使用java库。

编辑:有没有更快的基准测试(包括库方法)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-31 22:03:16

它不是很慢,至少没有办法让它更快。但这是错误的。如果文件足够大,方法read()将不会返回第一次调用的所有字节。此方法返回它设法读取的字节数作为返回值。

正确的方法是在循环中调用此方法:

代码语言:javascript
运行
复制
  public static void copy(InputStream input,
      OutputStream output,
      int bufferSize)
      throws IOException {
    byte[] buf = new byte[bufferSize];
    int bytesRead = input.read(buf);
    while (bytesRead != -1) {
      output.write(buf, 0, bytesRead);
      bytesRead = input.read(buf);
    }
    output.flush();
  }

按如下方式调用:

代码语言:javascript
运行
复制
ByteArrayOutputStream baos = new ByteArrayOutputStream();
copy(new FileInputStream(myfile), baos);
byte[] bytes = baos.toByteArray();

这样的东西在很多包中都实现了,例如@Andrey Borisov (+1)提到的FileUtils.readFileToByteArray()

编辑

我认为在你的例子中速度慢的原因是你创建了如此巨大的数组。你确定你真的需要它吗?试着重新思考你的设计。我相信您不必将此文件读入数组,并且可以增量地处理数据。

票数 16
EN

Stack Overflow用户

发布于 2012-07-31 21:58:27

apache commons-io FileUtils.readFileToByteArray

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

https://stackoverflow.com/questions/11741804

复制
相关文章

相似问题

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