黑马程序员技术交流社区

标题: 字符流和字节流的区别在哪儿 [打印本页]

作者: fatesabering    时间: 2014-12-12 11:53
标题: 字符流和字节流的区别在哪儿
好像是面试问过的问题,答案是不是字符流一次读一个字符,字节流一次读一个字节
作者: 史云龙    时间: 2014-12-12 11:59
字节流是由字节组成的,字符流是由字符组成的.Java里汉字字符由两个字节组成.默认编码格式GBK。
不是,字符流用于纯文本文件的读写,字节流可以用于所有文件的读写。
字符流读取的是常用的文字数据,字节流读取的是二进制数据。
作者: 奋斗的蜗牛ksd    时间: 2014-12-12 22:09
本帖最后由 奋斗的蜗牛ksd 于 2014-12-12 22:15 编辑

楼上说的不太严谨,不过大概意思很清楚了。

楼主额问题也很明显:字符流和字节流的区别在哪儿,你自己猜测答案为答案是不是字符流一次读一个字符,字节流一次读一个字节

很明显 ,是错误的。
楼主的答案可以改为: 字符流一次操作 两个字节的  unicode字符,字节流一次只能操作一个字节。【注意是操作,或者读写,   不能仅仅是 读  或者写】

首先明白:
字符流  字节流 是一个统称
流的共性操作 是  读  和  写

字符流 分为  Reader   Writer 两个类,【这两个大类下面还有很多类,不过都是具有读写操作文本数据的共性】这两个类 分别对应 read()  和write方法,  字符流 的读写 操作的是文本数据,即 字符 ,字符串,或者字符数组,

所以你如果面试时 回答 字符流一次读一个字符,很明显 你连字符流包括什么 都不知道,面试官肯定会直接挂了你。

字节流  ,具体有什么类,对应有什么方法,请楼主 自己查阅视频 或者API 去学习

再补充下二楼 说的错误:【也不能算错误,不严谨把】

字符流也是操作的字节数据,只不过 在读取 和写入的时候 增加了 解码  编码的操作,
编码操作:把 字符数据 编码 成 字节数据保存在硬盘上
解码 反之,不过 都是按照默认的 unicode 国际标准交换码 表来的,

而字节流 直接操作的是字节数据,面试的时候,我认为 在说明字节流的时候应该注重强调 字节流 的其他子类对象,强调 字节流 的 功能强大性,【具体子类对象 以及特点,适用范围 请自寻查阅API 或者 老毕视频】


哦,为了回答你的问题,今天我又翻阅了老毕视频,总结了一小点可能加分的地方:

Reader类的read()方法返回类型为int :作为整数读取的字符(占两个字节共16位),范围在 0 到 65535 之间 如果已到达流的末尾,则返回 -1

inputStream的read()虽然也返回int,但由于此类是面向字节流的,一个字节占8个位,所以返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。因此对于不能用0-255来表示的值就得用字符流来读取!比如说汉字.

也就是说:面试时 这么回答可能会加分:  读取汉字的时候,只能使用字符流的read方法,原因就是 字符流操作单元是两个字节,字节流操作单元是一个字节
作者: 奋斗的蜗牛ksd    时间: 2014-12-12 22:29
额。又发现字符流和字节流一个巨大的区别,  可能是面试官先更要的最直接 的答案,

看看有人想知道么。没人算了。
我留着   混点黑币
作者: 冥夜    时间: 2014-12-13 15:03
奋斗的蜗牛ksd 发表于 2014-12-12 22:09
楼上说的不太严谨,不过大概意思很清楚了。

楼主额问题也很明显:字符流和字节流的区别在哪儿,你自己猜测 ...

- -那为什么用FileInputStream可以读到txt文本的中文呢?好像字节和字符都能读中文,只要编码和默认编码一致就算是一个字节一个字节读也能读出中文吧?编码不一致用转换流就行了。
作者: 戴高乐    时间: 2014-12-13 17:11
这个毕老师的视频里面有讲的哦
作者: 奋斗的蜗牛ksd    时间: 2014-12-14 00:30
冥夜 发表于 2014-12-13 15:03
- -那为什么用FileInputStream可以读到txt文本的中文呢?好像字节和字符都能读中文,只要编码和默认编码 ...

你的答案涉及了字符集的概念,老实说 我没学会。
我没有否认字节流不可以读取 中文,只是  字节流 读取中文 会出现乱码,解决乱码问题 需要 用你说的   
FileInputStream 读取得到的字节序列使用InputStreamReader 转化为字符序列,并且可以指定相应的字符集


不过看网上资料,大家还都是提倡使用字符流读取中文的,建议罢了,看老毕视频也这么说的,
作者: 陈国华    时间: 2014-12-14 08:52
讨论的不错,学习了!:lol
作者: huoxy    时间: 2014-12-14 10:24
字符流就是在字节流的基础上加了编码表操作,多了一个转换。细节毕老师视频讲得挺清楚的。
作者: 逆世界ylm    时间: 2014-12-14 13:45
学习了,混点经验
作者: fatesabering    时间: 2014-12-15 22:56
奋斗的蜗牛ksd 发表于 2014-12-12 22:09
楼上说的不太严谨,不过大概意思很清楚了。

楼主额问题也很明显:字符流和字节流的区别在哪儿,你自己猜测 ...

明白了 写的很详细 谢谢




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