Java中的字符是采用Unicode编码的,是双字节的。之前介绍的的FileInputStream和FileOutputStream都是用来处理字节的,在处理上面的字符串的时候需要把字符串转换成字节以后再写入到文件,在读取字符串的时候也是先读到的字节数组,然后再将它转换成为字符串的。这就需要编写额外的字节与字符之间转换的代码。Java中专门有一个单独的类用来对IO设备进行字符的输入和输出,例如之前的例子就可以用FileReader和FileWriter。
Reader和Writer是所有字符流类的抽象基类,用于简化对字符串的输入输出编程,即用于读写文本数据,而InputStream和OutputStream则是用于对二进制格式文件的内容读取。
关于二进制文件和文本文件
从本质上来说他们之间没有什么区别,因为他们在硬盘上都有一种的存放方式------二进制,但是如果要对他们有些区分的话,那可以这样理解。我们现在的每个字符由一个或多个字节组成,每个字节都是用的-128—127之间的部分数值来表示的,也就是说,-128——127之间还有一些数据没有对应任何字符的任何字节。如果一个文件中的每个字节的内容都是可以表示成字符的数据,我们就可以称这个文件为文本文件,可见,文本文件只是二进制文件中的一种特例,为了与文本文件想区别,人们又把除了文本文件以外的文件称为二进制文件,由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。
接下来,我们把上一小节的例子程序改用FileReader和FileWriter来实现一下:
FileReaderAndWriter.java
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。