【发布时间】:2013-08-19 21:48:05
【问题描述】:
以下是在处理之前将整个文件读入内存的三种方法:
方法 A:
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
方法 B:
ByteArrayInputStream bi =
new ByteArrayInputStream(
org.apache.commons.io.FileUtils.readFileToByteArray(file))
方法 C:
File file = new File(yourFileName);
RandomAccessFile ra = new RandomAccessFile(yourFileName, "rw"):
byte[] b = new byte[(int)file.length()];
try {
ra.read(b);
} catch (Exception e) {
e.printStackTrace();
}
为什么我更喜欢一种方法而不是另一种方法?
是否有任何特定用例需要一种方法而不是另一种方法?
为什么不改用固定长度的byte[]?
【问题讨论】:
-
您的 3 个案例做了 3 件不同的事情。案例 A 没有读取任何内容。案例 B 读入一个字节数组,然后在字节数组上打开一个流。案例 C 读入一个字节数组。你真正想达到什么目标?
-
我想他在问他应该使用哪个来读取文件:a) 常规 java 流 b) Bytearray 流或 c) RandomAccessFile
-
第四种方法,可能也是最有效的方法是Files.readAllBytes(Paths.get(yourFileName))。
-
这仅仅是关于效率 - 还是有更具体的情况导致了这么多可能的替代方案?例如,当我们在 BufferedInputStream 中有缓冲区支持的解决方案时,为什么会出现 ByteArrayInputStream?
-
问题的标题具有误导性。
标签: java file-io inputstream