有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java文件到字节数组快速1

我想把一个文件读入字节数组。所以,我用以下方法阅读:

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

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

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


共 (1) 个答案

  1. # 1 楼答案

    它不是很慢,至少没有办法让它更快。但这是错误的。如果文件足够大,方法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()

    编辑

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