黑马程序员技术交流社区

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

作者: 2012    时间: 2013-9-16 12:29
标题: 转换流问题
本帖最后由 黄兴旺 于 2013-9-23 12:00 编辑

大家都知道在IO中有两个转换流,这两个转换流用于实现将字节流转换为字符流,其中InputStreamReader将字节输入流转换成字符输入流,OutputStreamWriter将字节输出流转化成字符输出流。
我想问的是,java怎么没有把字符流转换成字节流的转换流呢?


作者: 939676244    时间: 2013-9-16 12:36
1、从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现。

2、从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes() 获取到byte[],然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。
3.字符流已经很方便了,好像很少把字符转到字节的吧 = ={:soso_e121:}
作者: 1098918523    时间: 2013-9-16 12:43
以字符为导向的stream基本上有与之相对应的以字节为导向的Stream,两个对应类实现的功能相同,只是操作时的导向不同

1:字节输入流转换为字符输入流:

InputStreamReader是字节流向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符,它使用的字符集可以由名称指定或显示给定。根据InputStream的实例创建InputStreamReader的方法有4种:

InputStreamReader(InputStream in)//根据默认字符集创建

InputStreamReader(InputStream in,Charset cs)//使用给定字符集创建

InputStreamReader(InputStream in,CharsetDecoder dec)//使用给定字符集解码器创建

InputStreamReader(InputStream in,String charsetName)//使用指定字符集创建

2:字节输出流转换为字符输出流

OutputStreamWriter是字符流通向字节流的桥梁,它使用指定的charset将要写入流中的字符编码成字节,它使用的字符集可以由名称指定或显示给定,否则将接受默认的字符集:

根据根据InputStream的实例创建OutputStreamWriter的方法有4种:

OutputStreamWriter(outputstream out)//根据默认的字符集创建

OutputStreamWriter(outputstream out,charset cs)//使用给定的字符集创建

OutputStreamWriter(outputstream out,charsetDecoder dec)//使用组定字符集创建

OutputStreamWriter(outputstream out,String charsetName)//使用指定字符集创建
作者: 斗胆潇洒    时间: 2013-9-16 14:46
是你搞错咯,
OutputStreamWriter就是字符流转字节流的桥梁啊
作者: 王广亚    时间: 2013-9-16 16:03
对于这个问题我也有过疑问,不过同学,你上面写错了,应该是
InputStreamReader是吧字节流转换成字符流
OutputStreamWriter是把字符流转换成字节流
为什么InputStreamReader是吧字节流转换成字符流,而没有读取时把字符流转换成字节流呢?
我经过思考明白:因为他是读取,在硬盘上存放的是字节,从硬盘上读取数据当然用的是字节读取方法了(当然读取文本文件是可以用字符流读取,但是他底层也是调用的字节读取方式),所以读取时是字节转换字符的桥梁。
同样反向道理OutputStreamWriter是把字符流转换成字节流也不言自明了吧。





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