本帖最后由 奋斗的蜗牛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方法,原因就是 字符流操作单元是两个字节,字节流操作单元是一个字节 |