转换流

2017-09-07  本文已影响0人  Mango_yes

转换流包括两个:OutputStreamWriter和InputStreamReader

OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。

InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。

InputStreamReader这个类是按照指定编码读取字节流将其解码为字符流 。也就是说它是先读取字节流,先将文件以字节流的方式转换为对象,再由该类解码为字符,具体如下:(下面是一个以按照UTF-8编码字节流从a.txt文件读入,再解码为字符流,最后以字符流写入到b.txt文件中)

FileWriter fileWriter = new FileWriter("C:\\myPicture\\b.txt");

FileInputStream fStream = new FileInputStream("C:\\myPicture\\a.txt");

//InputStreamReader isr =newInputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误

InputStreamReader iStreamReader = new InputStreamReader(fStream,"UTF-8");//以指定的字符编码读取字节流读并解码为字符流

int len = 0;

char[] cbuf =new char[1024];

while((len=iStreamReader.read(cbuf))!=-1){

fileWriter.write(cbuf,0,len);

}

fileWriter.flush();

fStream.close();

iStreamReader.close();

fileWriter.close();

转换流和子类区别

发现有如下继承关系:

OutputStreamWriter: --子类FileWriter:

InputStreamReader:---子类FileReader;

父类和子类的功能有什么区别呢?

OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。

FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码。

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默认字符集。

InputStreamReader isr = new InputStreamReader(new

FileInputStream("a.txt"),"GBK");//指定GBK字符集。

FileReader fr = new FileReader("a.txt");

这三句代码的功能是一样的,其中第三句最为便捷。

上一篇 下一篇

猜你喜欢

热点阅读