Java - 文件到字节数组 - 快速一个

时间:2012-07-31 13:56:15

标签: java

我想将文件读入字节数组。所以,我正在阅读它:

    int len1 = (int)(new File(filename).length());
    FileInputStream fis1 = new FileInputStream(filename);
    byte buf1[] = new byte[len1];
    fis1.read(buf1);

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

编辑:是否有更快的基准(包括库方法)。

2 个答案:

答案 0 :(得分:16)

它不是很慢,至少没有办法让它更快。但这是错的。如果file足够大,方法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提到FileUtils.readFileToByteArray()(+1)

修改

我认为你的情况缓慢的原因是你创造了如此庞大的数组。你确定你真的需要吗?尝试重新思考你的设计。我相信您不必将此文件读入数组并可以递增地处理数据。

答案 1 :(得分:9)

apache commons-io FileUtils.readFileToByteArray