我想将文件读入字节数组.所以,我正在阅读它:
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)提到的
编辑
我认为你的情况缓慢的原因是你创建了如此庞大的数组.你确定你真的需要吗?尝试重新思考你的设计.我相信您不必将此文件读入数组并可以递增地处理数据.
| 归档时间: |
|
| 查看次数: |
17393 次 |
| 最近记录: |