我想将文件读入字节数组。因此,我正在阅读使用:
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()之后,我还会以适当的长度在磁盘上获取新文件,但是我无法在任何播放器中播放它。它说长度为