BufferedStreamReader在java中如何工作

BufferedStreamReader在java中如何工作,java,bufferedreader,Java,Bufferedreader,BufferedReader的优点似乎是减少了对硬盘的访问。但这是怎么回事 当然,举例来说,StreamBuffer不是读取每个字节,而是读取整个1000字节的数据块。但是他怎么能做到呢 在硬盘上,文件的所有字节可能不是连续的,就像在数组中一样,而是分散的,因为文件不是一次刷新写入的。但可能操作系统总是提前为一个文件保留1000字节,如果文件被使用,它将再保留1000字节 谁在管理硬盘上文件的每个字节对应的地址 你能告诉硬盘驱动器控制器,只需一个读取命令就可以给我1000字节的文件吗?硬盘被划分

BufferedReader的优点似乎是减少了对硬盘的访问。但这是怎么回事

当然,举例来说,StreamBuffer不是读取每个字节,而是读取整个1000字节的数据块。但是他怎么能做到呢

在硬盘上,文件的所有字节可能不是连续的,就像在数组中一样,而是分散的,因为文件不是一次刷新写入的。但可能操作系统总是提前为一个文件保留1000字节,如果文件被使用,它将再保留1000字节

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


你能告诉硬盘驱动器控制器,只需一个读取命令就可以给我1000字节的文件吗?

硬盘被划分为多个扇区,所以你永远不会只读取/写入一个字节

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


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

1扇区有512字节。所以1个扇区总是只属于一个文件??使用BufferedReader读取原始字节或字符串有什么区别。是的,不同的文件不能共享一个扇区。BufferedReader的优点是缓存在JVM中,而不是在OS级别,并且字节已经转换为Java字符:“如果没有缓冲,每次调用read()或readLine()都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。”它还提供了方便的方法readLine()和lines()“字节已转换为Java字符”。这意味着当我将文件从windows编辑器保存到硬盘时,字符可能只有1字节。但是javachar有2个字节。对吗?@Marcela28字符到字节的转换(在流、网络或磁盘上)是编码的作用
Reader
Writer
类都有一个内部编码,可以双向将字节映射到字符(ASCII、UTF-8、CP-1252,你可以说)。这与java字符消耗的堆字节数无关(在符合UTF-16的方式中,每个字符使用2个字节,但它已经改变了)。完全不同的概念。因此,评论并不是提升您对这方面知识的好地方。Java没有
BufferedStreamReader
StreamBuffer
(在标准库中),您可能需要编辑标题。另外,您的问题看起来并不是真正特定于java的,它会立即下降到系统级别。