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

ale*_*dro 2 java

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

    int len1 = (int)(new File(filename).length());
    FileInputStream fis1 = new FileInputStream(filename);
    byte buf1[] = new byte[len1];
    fis1.read(buf1);
Run Code Online (Sandbox Code Playgroud)

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

编辑:是否有任何基准更快(包括库方法).

Ale*_*exR 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();
  }
Run Code Online (Sandbox Code Playgroud)

称之为:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
copy(new FileInputStream(myfile), baos);
byte[] bytes = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

  • 注意如何将2个参数传递给copy方法,该方法有3个参数. (3认同)

And*_*sov 9

apache commons-io FileUtils.readFileToByteArray