BufferedStreamReader如何在Java

问题描述

BufferedReader的优点似乎在于减少了对硬盘的访问。但这如何工作?

例如,StreamBuffer不会读取每个字节,而是读取整个1000 Bytes块。但是他怎么做呢?

在硬盘上,文件的所有字节可能不连续,就像在数组中那样,而是分散的,因为文件不是一次刷新写入的。但是也许操作系统总是总是为文件保留1000字节,如果消耗了该文件,它将再保留1000字节。

谁在管理硬盘上文件的每个字节对应的地址?

您能告诉硬盘驱动器控制器一个读取命令就给我1000字节的文件吗?

解决方法

硬盘分为多个扇区,因此您永远不会只读写1个字节。

分配扇区并将它们链接到文件是文件系统的工作。它可以是Windows的NTFS或Linux的EXT4或任何其他版本。他们还尝试将一个文件的字节放入连续的扇区,以便更快地读取/写入。如果由于磁盘碎片而无法访问磁盘,则磁盘访问速度会变慢,并且需要进行碎片整理。

磁盘驱动器控制器期望读取1个以上的字节,并且始终读取至少一个扇区并将所有数据放入高速缓存中。因此,读取另一个字节只能访问高速缓存,而不能访问物理磁盘。 BufferedReader甚至跳过操作系统和文件系统层,并管理Java虚拟机内部的缓存,这甚至更快,尤其是在您需要解析读取的数据以将其拆分为文本行时。