返回信息流java的FileReader读文件是一次把文件内容全部加载到内存再读吗?如果是这样,那文件太大岂不是会悲剧?
这是一条镜像帖。来源:北邮人论坛 / java / #44076同步于 2015/9/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java的FileReader是怎么读文件的
wislov
2015/9/11镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
FileReader继承Reader类,提供读char[]或String的方法,至于你怎么读可以自己实现,比如官方实现的BufferedReader提供readLine()或者直接指定缓冲区大小的方法。
BufferedReader bufferedReader = new BufferedReader(new FileReader("test.conf"));
bufferedReader.readLine();
我的意思是在用一个文件构造filereader实例的时候会先把整个文件读入内存吗?
【 在 dss886 的大作中提到: 】
FileReader继承Reader类,提供读char...
不会啊,FileReader相当于一个接口(虽然并不是),文件的读取方式是你决定的(比如BufferReader),我上面举的例子就是一行一行读,并没有一次性读入内存
【 在 wislov 的大作中提到: 】
: 我的意思是在用一个文件构造filereader实例的时候会先把整个文件读入内存吗?
: FileReader继承Reader类,提供读char...
想要一次读取,files.read后续很多方法,or apache的 fileUtils.iterator
对于大容量比如几GB 几十甚至更高,需要缓冲读取,2种方式
BufferedReader 与 RandomAccessFile 推荐用前者,后者大于文件过大的话,会存在问题。一次开几十MB的缓冲读取速度比较快。
对于一般的服务而言瓶颈一般都在IO上边。
不会,要不你的程序就卡死了
【 在 wislov 的大作中提到: 】
: 我的意思是在用一个文件构造filereader实例的时候会先把整个文件读入内存吗?
: FileReader继承Reader类,提供读char...
来自「北邮人论坛手机版」
【 在 wislov 的大作中提到: 】
: java的FileReader读文件是一次把文件内容全部加载到内存再读吗?如果是这样,那文件太大岂不是会悲剧?
有时候我真希望能一下子把整个文件读进去,这样一个100M的文本文件全部都在内存里,处理起来很快(现在随便一个电脑都有几G内存)。但FileReader偏偏没有这个功能。。。
幸好后来Java 1.7有了java.nio.file.Files.readAllBytes,现在只需:
import java.nio.file.Files;
import java.nio.file.Paths;
byte[] bytes = Files.readAllBytes(Paths.get("path","to","my","file.txt"));
String txt = new String(bytes, "GB18030");
// 写成一行也行:
String txt = new String(Files.readAllBytes(Paths.get("myfile.txt")), "GB18030");
到了Java 1.8,可以直接读成行:
for (String line : Files.readAllLines(Paths.get("myfile.txt"))) {
System.out.println(line);
}
腰不酸了,背不痛了,再也不用被Python程序员笑话了。
定~~暖羊羊大神~~
小小的补充一点,
guava的 Files.readLines(finalFile, Charset.defaultCharset(), new LineProcessor<String>() )
每行处理,后边的阔以选择有问题你想干啥~~
【 在 nuanyangyang 的大作中提到: 】
:
: 有时候我真希望能一下子把整个文件读进去,这样一个100M的文本文件全部都在内存里,处理起来很快(现在随便一个电脑都有几G内存)。但FileReader偏偏没有这个功能。。。
: 幸好后来Java 1.7有了java.nio.file.Files.readAllBytes,现在只需:
: ...................