黑马程序员技术交流社区
标题:
对IO中的缓冲区问题?
[打印本页]
作者:
sbeeqnui1987
时间:
2012-6-15 09:06
标题:
对IO中的缓冲区问题?
本帖最后由 sbeeqnui1987 于 2012-6-19 21:41 编辑
从逻辑上来解释的话,BufferedOutputStream为流开辟了一个缓冲区,InputStream获取的数据先写入缓冲区,再交给由OutputStream的实现类完成标准输出,BufferedOutputStream只是一个中间过程,并没有输出的功能
从代码上解释的话,BufferedOutputStream中只封装了缓冲数据用的成员变量,而没有输出的方法,构造器接收到OutputStream的实现类再调用该类的方法完成输出.
我的理解是这样的:字符流在向文件输入数据时,到达缓冲区时,已经完成转换了,那岂不是OutputStreamWriter 和Writer的功能一样了?都是在送到缓冲区时,字符转换成字节,不知对吗?
作者:
郑冬
时间:
2012-6-15 09:15
OutputStreamWriter是字符流通向字节流的桥梁,可使用指定的 charset 将要写入流中的字符编码成字节。(即用字符流的方式写字节流)Writer会一个字节一个字节的把内容写入文件,这种速度多么慢。而outputstreamwriter是带有缓存的,用它包装了writer之后,writer就不会直接往文件中写,而是交给outputstreamwriter,然后就会往缓存中写,待Writer操作完成,OutputStreamWriter再一次性写入文件,效率大大提升。
作者:
刘笑
时间:
2012-6-15 09:39
额,OutputStreamWriter 和Writer的功能当然不一样。OutputStreamWriter是在把数据输入缓冲区时把字节流转换成字符流,而Writer只会一个字节一个字节的把内容写入文件。字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。字节主要是读一些如音乐文件、视频文件,而字符流就相对宽松一些了,如文本文件。至于为什么非要用OutputStreamWriter而不直接用Writer是因为Writer读入速度非常慢,而outputstreamwriter是带有缓存的,用它包装了writer之后,writer就不会直接往文件中写,而是交给outputstreamwriter,然后就会往缓存中写,待Writer操作完成,OutputStreamWriter再一次性写入文件,效率大大提升。
作者:
史卜坤
时间:
2012-6-15 10:02
[b]字节主要是读一些如音乐文件、视频文件(可以理解那些比较细腻精度要求高的文件),而字符流就相对宽松一些了:如文本文件……
OutputStreamWriter 是字符流通向字节流的桥梁,它使用的字符集可以由名称指定或显式给定。 每次调用 write() 方法都会导致在给定字符上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。默认的缓冲区对多数用途来说已足够大。但是,传递给 write() 方法的字符没有缓冲。 为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如: Writer out= new BufferedWriter(new OutputStreamWriter(System.out));
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2