为了账号安全,请及时绑定邮箱和手机立即绑定

在程序里读取磁盘文件时,为什么需要使用缓冲区。

在程序里读取磁盘文件时,为什么需要使用缓冲区。

慕姐8265434 2019-03-19 12:15:31
java中,读取磁盘文件时,通常都使用BufferedInputStream包装FileInputStream。但是操作系统内核读取磁盘文件时,不是会将内存作为磁盘文件的缓冲区吗?那为什么还要在程序里自己使用缓冲区??
查看完整描述

5 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

因为操作系统要将用户空间和系统空间隔离呀, 以保护数据安全. 准确的说, 操作系统在读取文件的时候是将文件读入系统空间, 然后再拷贝给应用程序进程的用户空间, 也就是题主说的程序自己的缓冲区. 如果让用户进程直接操作系统空间的缓冲区, 操作系统岂不是不安全了.


查看完整回答
反对 回复 2019-04-18
  • 嬬色污
    嬬色污
    问一下, 内核缓冲区和java直接缓冲区是同一块区域? 有什么关系和区别
  • 嬬色污
    嬬色污
    直接缓冲区和系统内核缓冲区是同一区域吗
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

做IO时JVM会在自己堆空间创建byte数组做buffer,一般用户不能够通过jvm直接调用内存(directbuffer)除外,堆空间buffer和内存交互由JVM管理。这样才能利用JVM优势,比如GC机制,以及java高层封装的API。


查看完整回答
反对 回复 2019-04-18
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

操作系统不仅会将硬盘上的文件读到内存作为缓存使用,也会在内存开辟另外一段空间给内存的数据做缓存处理。
意义何在? 为了管理,也为了效率。
内存与内存之间的数据交换,比内存与硬盘之间的数据交换速率高了两个数量级。
当内存上的某个进程需要数据的时候,如果内存缓存有匹配的数据,则直接在缓存区取,
如果没有,再去硬盘上读。(写也同理)

Java为IO操作设计缓存的意义,也在于此,
不同的地方在于Java缓存的数据只能被Java的当前运行环境所使用。
与频繁得去跟操作系统的缓存拿数据相比,这提高了执行效率,
尤其是你的代码需要进行频繁的IO操作时,意义就体现出来了。


查看完整回答
反对 回复 2019-04-18
?
倚天杖

TA贡献1828条经验 获得超3个赞

所谓的缓冲大多是有硬盘的硬件在接口区域封装的,而且缓冲区也不大。操作系统是不会缓存文件内容到内存的。


查看完整回答
反对 回复 2019-04-18
  • 5 回答
  • 0 关注
  • 1013 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号