Ⅰ 为什么要有输入输出缓冲区
有输入输出缓冲区用以暂时存放读写期间的文件数据而在内存区预留的一定空间。即利用主存的存储空间来暂存从磁盘中输入输出的信息。目的是缓和CPU 与 I/O 设备间速度不匹配的矛盾。减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制。提高CPU和 I/O 设备之间的并行性。
(1)缓存区和输入流扩展阅读:
输入输出缓冲区通过磁盘缓存来实现,磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器存储空间的扩充。 主存可以看作是辅存的高速缓存, 因为辅存中的数据必须复制到主存方能使用;反之,数据也必须先存在主存中,才能最终输出到辅存。
当输入与输出或生产者与消费者的速度基本相匹配时,采用双缓冲能获得较好的效果,可使生产者和消费者基本上能并行操作。
Ⅱ java 缓冲输入流 和 字符输入流 什么样的区别
是指 Buffered... 那个流么?
带buffered,意味着,他会在内存里给你开一块缓冲区,并预先将输入流填满缓冲区,你的操作其实是从缓冲区读取。
而不带buffered,意味着,你每一次读取都是从imputstream里面读。
Ⅲ 输入流的清空C++标准输入流缓冲区
调用iostream输入数据时,若用户输入的数据类型与要求的不符(比如要求读入整数而用户输入的不是数字),则cin会被设置为fail(可以用!cin判断),而用户输入的数据仍然留在流缓冲区里,需要手动清空:cin.clear();cin.ignore(numeric_limits::max(),' ');
Ⅳ C语言中的缓冲区和数据流是一个概念吗
不是一个概念。这两个东西常在从硬盘读取数据的过程中使用。数据流是指你要从硬盘中读取并放到内存的那一段数据,就跟你打开水龙头然后再关上流出的一段水一样。而缓冲区是指你读取的那段数据在内存中存放的区域。
至于为什么要有缓冲区呢?因为硬盘读写很慢,你如果再一个字节一个字节得读,效率会更低。
而内存的读取速度很快,所以先把整段的文字一口气读下来放到缓冲区以后再一个一个转码(从字节码转成字母数字符号汉字)可以大幅度提高运行效率。
Ⅳ 同样有缓冲区,为什么bufferedReader输入流不需要清空缓冲区而bufferedWriter需要清空缓冲区呢
当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取,如果缓冲区数据不足,才会再从文件中读取。清不清空BufferedReader的缓冲区都对文件本身没什么影响,清了还影响速度
使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。BufferedWriter的缓冲区如果不清空,有可能有部分内容只是写进缓冲区,但没有真正写入文件,这样很可能导致文件内容不全甚至是空白。
Ⅵ JAVA中 输入 输出流 的read 和write其实都是往自己的缓存区写数据吗我对 写入 和读入完全搞混了 求解答啊
io流分为字节流,字符流。字节流继承于 InputStream、OutputStream,字符流继承于 Reader、Writer。不论是什么流,read()都是读的意思 把指定的文件内容读出来,存入程序中;而write()是写的意思 把指定的内容,从程序写入到指定的文件中。
Ⅶ java 里的输入输出流是都采用带缓冲区技术吗还是说只有缓冲流带缓冲区
有缓冲的都是有buffer的想BufferReader和BufferWriter这些方法
Ⅷ JAVA中输入输出流和缓冲式输入输出流出有什么区别
简单地说,缓冲式输入输出流利用了缓冲区,而不是像一般的输入输出流那样,每次读取或写入数据都会引起对设备(如存放在磁盘上的文件)的访问。
具体说来,
缓冲式输入流BufferedInputStream(InputStream
in),新建一个默认大小的缓冲流。从一个流中读取字符,而不会每次都引起对设备的访问。当缓冲区空的时候,一个新的数据块将会被读入缓冲区。
缓冲式输出流BufferedOutputStream(OutputStream
out),新建一个默认缓冲大小的缓冲流。缓冲输出流收集写入的字符以避免每次都引起对设备的访问。当缓存区满或者被刷新里,数据被写入设备。
Ⅸ 输入流 和输入缓冲区什么关系啊
1、按下enter会把之前输入的字符(包括回车符自己)送入到输入缓冲区,但并不会刷新输入流。输入流是C++自己实现的,流的使用也由它管理,C++并没有接收到回车符就刷新输入缓冲流一说。在输入缓冲区的内容被读取完之前(除\r\n等),它不会再提示用户作新的输入,所以表面上看起来,用户回车后它的内容也更新了,其实是它之前的内容已经被读完。
2、不存在了。输入流就像一个先进先出的字节队列,字节被读出后就被丢掉了。
3、向上面那位 Xuxu8511 说的(请见谅),用cin、get、getline、getchar、gets等都能获取输入流的数据,另外,getch、getche等不能获取输入流的数据。
4、cin>>i语句会先检查缓冲区有没有数据,如果没有它会提示用户输入,输入 "12 78” 回车后,这些字符会先送到输入缓冲区,这时缓冲区的内容为 "12 78 \r\n”。之后它会读缓冲区内容,因为i是int型,所以它遇到空格停止读,把12的值赋给i,并删除缓冲区的12。cin>>j也是类似。
Ⅹ 一个关于java 字节缓冲输入输出流的问题
1.
缓冲区是一个内存区域的概念,类似于池子
2.
流就像一根管道,因为使用了一个池子(缓冲区)作为中间过渡,所以称为缓冲流
3.
使用缓冲流的目的是为了减少直接与硬盘交互传输的次数,增加每次传送的数据量,借以提高传输效率,保护硬件