黑马程序员技术交流社区

标题: 关于转换流的问题 [打印本页]

作者: yanglfree    时间: 2013-9-27 22:14
标题: 关于转换流的问题
API文档中是这么写的:InputStreamReader 是字节流通向字符流的桥梁OutputStreamWriter 是字符流通向字节流的桥梁字符流通向字节流与字节流通向字符流这两者的区别是什么?
new OutputStreamWriter(System.out))这句话里面传入的System.out不也是属于OutputStream字节流么?如果是,那字符流通向字节流的桥梁又怎么讲?

作者: 蔚蓝天色    时间: 2013-9-27 23:33
字符流通向字节流与字节流通向字符流这两者的区别是什么?
  没什么区别,就是将字节的文件输出流,以字符的形式输出,字符的文件输出流,以字节输出,说的有点绕哈,
你也查过jdk了,从当中可以知道FileOutputStream是OutputStream的直接子类,FileInputStream也是InputStream的直接子类,但是字符文件流的操作类却不同,FileWriter并不直接是Writer的子类,而是OutputStreamWirter的子类,FileReader同样不是Reader的直接子类,而是InputStreamReader的类,



那么从中就可以发现,不管是字节流还是字符流,实际上最终的都是以字节的形式操作输入输出流的。
作者: doitforyou    时间: 2013-9-27 23:56
在计算机底层,流操作都是通过字节流来完成的,我们平时所操作的字符流是通过编码表来实现的,但是当他们实际在内存中运行时,底层还是要转换为字节流来操作的,所以,字符流通向字节流的桥梁是系统自动完成的,不需要我们操作。
而字节流通向字符流则需要我们人为来搭建一个桥梁了,因为要将计算机语言转换为我们所熟悉的字符流,所以,如题所述,1.这两者的区别是一个是系统自动完成的,一个需要我们人工来实现。
2.字节流转换为字符流,接收的确实是字节流,所以楼主所言极对.
作者: .只影、天涯.    时间: 2013-9-28 00:17
不管是什么格式的文本文件,用字节流都可以对他们进行各种操作,但是常用文件可以分成两大类:文本和非文本。我认为他们都是调用底层的字符转成字节或者字节转成字符方法对流代码的优化后而衍生出来的。他们的区别就是在于他们应用方面的不同,InputStreamReader读取转换流是目的需要字符流进行操作时才使用,而OutputStreamWriter 转换流主要是涉及到字符编码转换的时候才使用。
作者: yanglfree    时间: 2013-9-28 01:06
.只影、天涯. 发表于 2013-9-28 00:17
不管是什么格式的文本文件,用字节流都可以对他们进行各种操作,但是常用文件可以分成两大类:文本和非文本 ...

把IO复习了一遍,发现你说的是对的。
OutputStreamWriter是在构造的时候可以指定编码表

作者: 乔兵    时间: 2013-10-3 19:03
问题解决后,请修改帖子分类为:提问结束




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2