未读的输入流只是指向文件的指针吗?

时间:2015-07-15 19:22:08

标签: java

这个问题特别指的是输入流的Java版本,但问题可能适用于其他语言。

在进行读取调用之前,输入流是否充当指向文件的指针?在我正在使用的玩具程序中,我正在通过几个不同的函数传递输入流,并想了解我是否将整个文件作为字节加载到RAM中,将特定数量的字节加载到缓冲区中在RAM中,或者只是指向文件的指针,该文件只在读取调用时将字节加载到RAM中。

我使用的输入流类型是否有不同的实现(即ByteArrayInputStream vs BufferedInputStream)?

1 个答案:

答案 0 :(得分:0)

java.io.File可能更接近指向文件的指针。 java.io.FileInputStream和其他InputStreams更类似于变换器/交错,以及对正在读取的内容的序列化表示。

就你传递整个文件而言,答案是否定的。在Java中,所有对象都通过指针传递...只需4个字节。因此,即使您将整个文件加载到byte []中,也可以将该byte []传递给其他方法,它对内存几乎没有任何影响...并且不会比传递一个小字节[]更具影响力。

BufferedInputStreamBufferedReader s基本上只能用于低效阅读。如果您在处理之前尝试阅读整个文件或整个网址的内容,则缓冲无关紧要。另一方面,如果您正在逐行读取文件,那么当缓冲区有用时就是这样。