当前位置: 首页 > 面试题库 >

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

司马祖鹤
2023-03-14
问题内容

我想将文件读入字节数组。因此,我正在阅读使用:

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

但是,它确实非常慢。任何人都可以告诉我一种非常快速的方法(可能是最好的方法)将文件读入字节数组。如果需要,我也可以使用Java库。

编辑:有没有哪个基准更快(包括库方法)。


问题答案:

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

像这样的事情在很多包中都有实现,例如FileUtils.readFileToByteArray()@Andrey Borisov(+1)提到的

编辑

我认为您的情况变慢的原因是您创建了如此庞大的数组。您确定您确实需要吗?尝试重新考虑您的设计。我相信您不必将此文件读入数组就可以逐步处理数据。



 类似资料:
  • 我正在尝试将我的odt文件放到一个字节数组中,以便将其上传到我的服务器。我想我在这里找到了如何做的方法:我如何从一个ODT文件生成字节数组java。 但这似乎行不通。 所以也许您可以告诉我如何将文件放置:)

  • 问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以

  • 问题内容: 我正在使用节点v0.10.26并表示v4.2.0,而我对节点还很新。在过去三个多小时的时间里,我一直在想着要在节点上使用文件上传表单,这是我的头。在这一点上,我只是试图让req.files不返回未定义。我的观点看起来像这样 这是我的路线 这是我的app.js 我看到了其中包含的内容,应该可以提供帮助,但是如果添加这些行,我什至无法启动服务器。 问题答案: ExpressJS问题: 大多

  • 问题内容: 我得到一个整数: 当我使用方法: 给出: 但我想要一个字节数组: 我该怎么做? 问题答案: 使用Java NIO的ByteBuffer非常简单: 输出:

  • 问题内容: 我知道如何在Java中执行此操作,但是找不到Java的ByteBuffer的快速等效项,因此也找不到它的.putDouble(double value)方法。 基本上,我正在寻找这样的功能: 问题答案: typealias Byte = UInt8 但是结果与您的期望相反(由于字节顺序): 添加: 对于Xcode8 / Swift3.0: 对于Xcode8.1 / Swift3.0.1

  • 问题内容: 在尝试说“ Google it”之前,我尝试过,发现了一些有趣的文章,但没有任何效果。 我需要将网站上的mp3文件转换为字节流,以后可以将其保存到本地文件中。 这是我的代码(最重要的部分): 该代码编译没有错误。与网址的连接有效。它发送正确的响应。 问题出在转换中。在byteArrayToFile()之后,我还会以适当的长度在磁盘上获取新文件,但是我无法在任何播放器中播放它。它说长度为