转眼已经开学了一周了, Java流也学了好几天了,每天都有不同的感受,感觉这东西真的很神奇,越学就觉得它很强大,只是小小的几行代码,就能有许多不同的效果。。。
学习 Java流,要在脑子里印上它的各种关系模式图,只有这样,才能够熟练掌握它,这几天也一直看这个关系图,刚开始看的时候感觉应该没有多么的难懂,可是真正看了之后才觉得它很深奥。。。今天学的转换流,大概就是字节流和字符流之间的转换桥梁, FileReader:专门用于处理文件的字符流读取对象, FileWriter:专门用于处理文件的字符写入流对象。当字节和字符之间有转换动作时,和流数据的数据进行编码表的指定时;具体的体现是 InputStreamReader是字节到字符的桥梁, OutputStreamWriter是字符到字节的桥梁,这两个流对象是字符流体系中的成员;那么他们有转换作用,而本身又是字符流,所以在构造的时候,需要传入字节流对象进来。转换流中的 read方法。已经融入了编码表,
在底层调用字节流的 read方法时将获取的一个或者多个字节数据进行临时存储,
并去查指定的编码表,如果编码表没有指定,
查的是默认码表。那么转流流的 read方法就可以返回一个字符比如中文。
转换流已经完成了编码转换的动作,对于直接操作的文本文件的 FileReaer而言,就不用在重新定义了,
只要继承该转换流,获取其方法,就可以直接操作文本文件中的字符数据了。在使用 FileReader操作文本数据时,该对象使用的是默认的编码表。
如果要使用指定编码表时,必须使用转换流。 FileReader fr = new FileReader("a.txt");//操作 a.txt的中的数据使用的本系统默认的 GBK。操作 a.txt的中的数据使用的也是本系统默认的 GBK。 InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));这两句的代码的意义相同。如果 a.txt中的文件中的字符数据是通过 utf-8的形式编码。那么在读取时,就必须指定编码表。那么转换流必须使用。