黑马程序员技术交流社区

标题: IO流。 [打印本页]

作者: 黑马李刚    时间: 2011-9-7 17:46
标题: IO流。
IO流中的字节流(FileInputStream, FileOutputStream)也能操作文本文件,字符流(FileReader, FileWriter)还有存在的意义吗?
作者: 郭亚飞    时间: 2011-9-7 18:11
字节流处理单元为1个字节,操作字节和字节数组。
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。
所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
总的来说:
字符流 FileReader FileWriter 主要用于处理文本格式的文件
字节流 FileInputStream FileOutputStream 主要用于处理二进制文件。
二进制文件和文本文件的区别:
如果一个文件专用于存储文本字符,而没有包含字符以外的其它数据,就称为文本文件;除此之外的文件就称为二进制文件
[ 本帖最后由 郭亚飞 于 2011-09-07  18:26 编辑 ]
作者: 匿名    时间: 2011-9-7 18:33
IO流中的字节流(FileInputStream, FileOutputStream)可以输入输出英文与数字,但如果输出汉字的话 就可能会出现乱码问题,比果你开辟的byte[]组数空间是奇数的话 传入一段中文汉字的话 就很有可能出现乱吧 因为一个汉字是要占两个字节的 还有些情况 你用循环的方式来输入输出 每次如果也只读一个字节的话  一个汉字占两个字节 ,计算机会把汉字拆开来输入输出 这样一定会出现乱码……所以要用到字符流 当然 有很多种方式来避免乱码的产生 但这也必不可少的会用到字符流……
作者: 匿名    时间: 2011-9-11 00:47
字符流 FileReader FileWriter 主要用于处理文本格式的文件
字节流 FileInputStream FileOutputStream 主要用于处理二进制文件。

FileInputStream,FileOutputStream 流都是用来处理字节的,FileOutputStream 并不能直接处理文本文件,需要把它转化成字节才能写入文件,FileInputStream读取的也是字节,然后转化成需要的类型(比如:字符串)。

而FileReader FileWriter 可直接用来处理文本文件,简化了字符串的输入输出。相对于FileInputStream FileOutputStream 来说,FileReader FileWriter 省略了字符串和字节的转化过程,更加有利于程序的简洁性。
作者: 匿名    时间: 2011-9-11 02:08
标题: 回复 沙发 的帖子
那用字符流方式直接读二进制文件可以吗?我记得是可以的。
本来一个字节就是一个数据,现在读一个字符即两个字节就翻译,不就出错了吗???????
作者: 匿名    时间: 2011-9-11 14:42
字节流确实可以操作文本文档,但是如果用字符流来操作文档会更加方便,更加快速。
作者: 匿名    时间: 2011-9-12 23:58
补充:关于IO这块分字节和字符,锁对应的方法我归纳了一下
字符流(默认编码表)             字节流
FileReader               FileOutputStream
FileWriter               FileInputStream

BufferedReader           BufferedOutputStream
BufferedWriter           BufferedInputStream




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