我想将文件读入字节数组。所以,我正在阅读它:
int len1 = (int)(new File(filename).length());
FileInputStream fis1 = new FileInputStream(filename);
byte buf1[] = new byte[len1];
fis1.read(buf1);
然而,它真的很慢。谁能告诉我一个非常快速的方法(可能是最好的方法)将文件读入字节数组。如果需要,我也可以使用java库。
编辑:是否有更快的基准(包括库方法)。
答案 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