转换流与其子类之间的区别

转换流与其子类之间的区别

发现有如下继承关系:

Writer 字符输出流

OutputStreamWriter   转换流(字符流—>字节流)(属于字符输出流, 可以指定字符编码表,用来写入数据到文件)

FileWriter 操作文件中字符输出流,采用默认的字符编码表

 

Reader 字符输入流

InputStreamReader: 转换流(字节流à字符流)(属于字符输入流,可以指定字符编码表,用来从文件中读数据)

FileReader操作文件中字符输入流,采用默认的字符编码表

 

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

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

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

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

InputStreamReader isr = newInputStreamReader(new FileInputStream("a.txt"),"GBK");//指定GBK字符集。

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

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

注意:一旦要指定其他编码时,绝对不能用子类,必须使用字符转换流。什么时候用子类呢?

条件:

1、操作的是文件。2、使用默认编码。

总结:

字节--->编码表--->字符: 看不懂的--->看的懂的。  需要读。输入流。InputStreamReader

字符--->编码表--->字节: 看的懂的--->看不懂的。  需要写。输出流。OutputStreamWriter

举个例子

现有一字符串:”我爱Java”。将该字符串保存到当前项目根目录下的a.txt文件中。

要求:使用utf8编码保存。

      public staticvoid main(String[] args) throws IOException{

           // 要保存的字符串

           String content= "我爱Java";

           // 创建字节输出流对象

           FileOutputStream fos = new FileOutputStream("a.txt");

           // 创建转换输出流对象

           OutputStreamWriter osw = newOutputStreamWriter(fos, "utf8");

           // 调用方法写出数据

           osw.write(content);

           // 关闭流释放资源

           osw.close();

      }

}

在使用中的注意事项:

在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值