首先无缓存只不过是指在用户层没有缓存,但对于内核来说,还是进行了缓存
如果你想要写数据到文件中(即硬盘中),内核先将数据写入到内核中所设的缓冲储存器(write()系统调用),等缓冲器满的时候再真正写到磁盘上
带缓冲的IO是在用户层再建立一个缓冲区(流缓冲区),通过减少对系统调用(read() 和 write())的次数来提高性能
例如:用户多次调用fwrite将数据写入流缓冲区,等流缓冲区满的时候再调用一次write(),写入内核缓冲区
总结:
无缓冲IO操作数据流向路径:数据->内核缓冲区->磁盘
带缓冲IO操作数据流向路径:数据->流缓冲区->内核缓冲区->磁盘
标准IO就是带缓存的IO,提供了三种类型的缓存
全缓存:当填满标准IO缓存后才执行IO操作,磁盘上的文件通常都是全缓存的
行缓存:当输入输出遇到换行符或缓存满时,才执行IO操作,stdin和stdout通常是行缓存的
无缓存:stderr通常是无缓存的,因为它必须尽快输出
是什么样的缓冲跟使用那个函数没有关系,而跟你读写什么类型的文件有关系.
带缓存的文件操作时标准C库的实现,第一次调用带缓存的文件操作函数时,标准库会自动非配内存并且读出一段固定大小的内存存储在缓存中。以后每次的读写操作并不是针对硬盘上的文件直接进行的,而是针对内存中的缓存的。
不带缓存的文件操作通常都是系统提供的系统调用
无缓冲IO和带缓冲IO的区别
原创
©著作权归作者所有:来自51CTO博客作者leeyingxj的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java IO - 源码: InputStream
本文主要从JDK 11 源码角度分析InputStream。
Java IO/NIO/AIO -
Java中的IO缓冲流
概述缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类:字节缓冲流:putStream in)
http 网络 java 缓冲流 输出流 -
00022.10 缓冲IO流 Buffered
系列文章目录文章目录系列文章目录一、缓冲IO流是什么?二、代码总结一、缓冲IO流是什么?缓
缓冲IO流 Buffered 文件读写 java System