我想把一个文件读入一个字节数组。因此,我使用以下命令来阅读它:
    int len1 = (int)(new File(filename).length());
    FileInputStream fis1 = new FileInputStream(filename);
    byte buf1[] = new byte[len1];
    fis1.read(buf1);然而,它真的非常慢。谁能告诉我一个非常快的方法(可能是最好的方法)将一个文件读入字节数组。如果需要,我也可以使用java库。
编辑:有没有更快的基准测试(包括库方法)。
发布于 2012-07-31 22:03:16
它不是很慢,至少没有办法让它更快。但这是错误的。如果文件足够大,方法read()将不会返回第一次调用的所有字节。此方法返回它设法读取的字节数作为返回值。
正确的方法是在循环中调用此方法:
  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();
  }按如下方式调用:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
copy(new FileInputStream(myfile), baos);
byte[] bytes = baos.toByteArray();这样的东西在很多包中都实现了,例如@Andrey Borisov (+1)提到的FileUtils.readFileToByteArray()。
编辑
我认为在你的例子中速度慢的原因是你创建了如此巨大的数组。你确定你真的需要它吗?试着重新思考你的设计。我相信您不必将此文件读入数组,并且可以增量地处理数据。
发布于 2012-07-31 21:58:27
apache commons-io FileUtils.readFileToByteArray
https://stackoverflow.com/questions/11741804
复制相似问题