Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中读取非常大的文本文件_Java_Inputstream_Bufferedreader_Inputstreamreader - Fatal编程技术网

在java中读取非常大的文本文件

在java中读取非常大的文本文件,java,inputstream,bufferedreader,inputstreamreader,Java,Inputstream,Bufferedreader,Inputstreamreader,我使用以下代码读取大文件: InputStreamReader isr = new InputStreamReader(new FileInputStream(FilePath)); BufferedReader br = new BufferedReader(isr); while ((cur = br.readLine()) != null) 我可以用上面的代码读取大文件,但我想知道这些阅读器在内存中是如何工作的。inputstreamreader扮演什么角色?当逐行读取一个文件(例如2

我使用以下代码读取大文件:

InputStreamReader isr = new InputStreamReader(new FileInputStream(FilePath));
BufferedReader br = new BufferedReader(isr);
while ((cur = br.readLine()) != null)

我可以用上面的代码读取大文件,但我想知道这些阅读器在内存中是如何工作的。inputstreamreader扮演什么角色?当逐行读取一个文件(例如2 GB)时,会分配多少内存块?

InputStreamReader是一种根据某些字符集将原始InputStream(字节流)转换为字符流的工具。FIleInputStream是来自给定文件的字节流(它扩展了InputStream)。例如,您可以使用InputStreamReader从套接字和套接字读取文本。getInputStream()还提供InputStream

InputStreamReader是一个Reader,是字符流的抽象类。单独使用InputStreamReader效率低下,因为每个“读线”实际上都会从文件中读取。当您使用BufferedReader进行装饰时,它将读取一个字节块并将其保存在内存中,然后将其用于后续读取

关于大小:文档未说明默认值:

可以指定缓冲区大小,也可以使用默认大小。这个 默认值对于大多数用途都足够大

必须检查源文件才能找到值

这是OpenJDK中的实现:

 private static int defaultCharBufferSize = 8192;

Oracle的封闭源代码JDK实现可能有所不同。

查看源代码。源代码是否与javadocs中的相同?我已经经历过了。我的困惑是inputstreamreader和bufferedreader是如何链接的。bufferedreader需要一个源来读取。这是唯一的链接。那么这是否意味着isr将继续向br提供字符流,而bufferedreader将其存储在buffer中?如果是这种情况,isr从文件一次读取(读取字节并将其解码为字符)多少个字符您可能应该提到这是从JDK7读取的。fileinputstream如何从输入文件获取字节流?看看代码。它需要与JVM通信,以便与主机操作系统交互操作。猜测它是如何完成的并不容易,还有本机代码(C或C++):私有本机void open(字符串名)抛出FileNotFoundException;这就是我想知道的。谢谢!