A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾辉 黑马帝   /  2012-2-17 11:08  /  2881 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

inputstreamwriter和outputstreamwrite是用来在字符流和字节流之间进行转换的,我对这个字节流和字符流不是很清楚,那位高手给指点一下?
比如说,有一个字符   “中”  :
假设这个字符的unicode编码在内存中的表示为1111101010110101, 共两个字节,将它用outputstreamwriter转换为字节流之后,这个字节流在内存中的表示是怎么样的?转换前后内存中表现形式有什么不同,是如何进行转换的?

5 个回复

倒序浏览
字节流的存储单位是字节 一个byte 8位
而字符流的存储单位是一个char 16位

转换留还有一个最大的特点 是可以用来指定字符编码表

将它用outputstreamwriter转换为字节流之后 <----- 这里是把OutputStream字节流转换为字符流 按照默认的编码表 一次输出一个字符

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
字节流是以字节作为流中元素的基本类型,每次读或者写的最小单位是一个字节。字节输入流类是InputStream类以及子类,输出流是OutputStream以及子类

字符流是以字符作为流中元素的基本类型,每次读写的最小单位是一个字符,即2字节的Unicode码。字符输入流为Reader类以及其子类,输出流类是Writer以及其子类。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的,即为字节流。


在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流非常不方便。计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。因此字符流就诞生了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
可以这样理解:
字符:二个字节
字节:一个字节
如:现在要读一个汉字(以二个字节来存,既:一个字符)的“中”。
        1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
        2.用字节流读:一次读一个字节,那么要读二次才完全得读取到了这个汉字。
        不然就读取到了半个(一个汉字二个字节中的一个字节),那这半个(一个字节)是怎么存储?

在字符流中你可以一次读取一行(readLine())。
回复 使用道具 举报
呵呵,你可以试试看,有一次我在做练习,是复制一张图片,本来应该用字节流的,但是我用了字符流,结果是复制成功了,但是图片打不开,能用字符流的地方尽量用字符流 ,毕竟效率高一些,但是可别用错了地方,用错了,就会出现我上面说的这种情况的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马