黑马程序员技术交流社区

标题: 字符流和字节流的问题 [打印本页]

作者: 张亚青    时间: 2013-3-21 11:00
标题: 字符流和字节流的问题
从API文档中可以看到如下解释:
FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。

FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。

【问题】FileInputStream就不能读取字符流文件吗?我试了一下,是可以的,请大虾们给详细解释下。
作者: qintoko    时间: 2013-3-21 11:11
这个问题本质是在问字节流和字符流的区别:
字符 FileReader:一次读取二个字节
字节FileInputStream:一次读取一个字节
例:你现在要读一个汉字(以二个字节来存,既:一个字符)的“汉”。
        1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
        2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。
作者: 黑马-周科    时间: 2013-3-21 11:29
读取文本就用字符流,  其他都用字节流。

作者: MyNameIs520    时间: 2013-3-21 12:07
Java最先是只有字节流(java1.0)的,字节流可以操作所有的JAVA文件,
但是为了对文本文档的操作更效率,产生了字符流(java1.1),字符流是在字节流+编码表的情况下产生的
字节流:一次读取一个字节,即是一个byte字节
        使用:    直接对文件进行操作,不需要调用内存缓冲,也就不需要对输出流进行刷新,效率高。可操作任意类型的文件,譬如照片,多媒体等等的传输。
字符流:一次读取两个字节,即是一个char型字符
        使用:  可以自定义一个缓冲数组,也可用JAVA封装好的缓冲。所以在写入完毕之后,需要通过刷新flush()方法将缓冲区的数据刷如文件中,一般用于文本类型文件的传输。




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