Java 流跳过会加载内存中的所有内容吗

Java 流跳过会加载内存中的所有内容吗,java,memory,bufferedreader,java-stream,Java,Memory,Bufferedreader,Java Stream,我有streams=bufferedReader.lines() bufferedReader返回一个惰性流 当使用s.skip(100)时,limit(100)会调用来加载内存中的所有s,或者它会被计算为skip和limit值 使用skip/limit函数会占用多少内存?为了跳过100行,不可避免地要将数据读入内存,以便找到要跳过的字符位置的行终止符的位置 不过,内存占用并不取决于跳过的行数,因为BufferedReader的内部缓冲区的大小将固定在BufferedReader的结构上,请参阅

我有
streams=bufferedReader.lines()

bufferedReader返回一个惰性流

当使用s.skip(100)时,limit(100)会调用来加载内存中的所有s,或者它会被计算为skip和limit值

使用skip/limit函数会占用多少内存?

为了跳过100行,不可避免地要将数据读入内存,以便找到要跳过的字符位置的行终止符的位置

不过,内存占用并不取决于跳过的行数,因为
BufferedReader
的内部缓冲区的大小将固定在
BufferedReader
的结构上,请参阅和

作为一种特殊情况,如果某行不适合缓冲区(请注意,默认缓冲区大小为
8192
),则该行将使用临时
StringBuffer

通常,流API可以利用后端中没有专用的跳过操作,您可以通过查看接口来验证,因此跳过行与在
BufferedReader
上重复调用
readLine()
,但立即删除生成的字符串没有什么不同

如开头所述,读取数据是不可避免的,因此与读取本身相比,从读取的数据创建临时字符串实例的成本可以忽略不计。

为了跳过100行,为了找到要跳到哪个字符位置的行终止符位置,不可避免地要将数据读入内存

不过,内存占用并不取决于跳过的行数,因为
BufferedReader
的内部缓冲区的大小将固定在
BufferedReader
的结构上,请参阅和

作为一种特殊情况,如果某行不适合缓冲区(请注意,默认缓冲区大小为
8192
),则该行将使用临时
StringBuffer

通常,流API可以利用后端中没有专用的跳过操作,您可以通过查看接口来验证,因此跳过行与在
BufferedReader
上重复调用
readLine()
,但立即删除生成的字符串没有什么不同


正如一开始所解释的,读取数据是不可避免的,因此,与读取本身相比,从读取的数据创建临时字符串实例的成本可以忽略不计。

流的关键在于它不会保持任何超出需要的状态。除非调用类似的方法,否则流不会在内存中保留跳过的行。限制只是一个计数器,它本身不需要保留除计数以外的任何东西。流的要点是它不保留任何超出需要的状态。除非调用类似的方法,否则流不会在内存中保留跳过的行。限制只是一个计数器,它本身不需要保留计数以外的任何内容。