这个问题特别指的是输入流的Java版本,但问题可能适用于其他语言。
在进行读取调用之前,输入流是否充当指向文件的指针?在我正在使用的玩具程序中,我正在通过几个不同的函数传递输入流,并想了解我是否将整个文件作为字节加载到RAM中,将特定数量的字节加载到缓冲区中在RAM中,或者只是指向文件的指针,该文件只在读取调用时将字节加载到RAM中。
我使用的输入流类型是否有不同的实现(即ByteArrayInputStream vs BufferedInputStream)?
答案 0 :(得分:0)
java.io.File
可能更接近指向文件的指针。 java.io.FileInputStream
和其他InputStreams更类似于变换器/交错,以及对正在读取的内容的序列化表示。
就你传递整个文件而言,答案是否定的。在Java中,所有对象都通过指针传递...只需4个字节。因此,即使您将整个文件加载到byte []中,也可以将该byte []传递给其他方法,它对内存几乎没有任何影响...并且不会比传递一个小字节[]更具影响力。
BufferedInputStream
和BufferedReader
s基本上只能用于低效阅读。如果您在处理之前尝试阅读整个文件或整个网址的内容,则缓冲无关紧要。另一方面,如果您正在逐行读取文件,那么当缓冲区有用时就是这样。