打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java IO操作——字节-字符转换流(OutputStreamWriter、InputStreamReader)
 
 

学习目标

 掌握OutputStreamWriter和InputStreamReader类的作用
具体学习内容:
OutputStreamWriter和InputStreamReader
在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。
OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。
InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
一般在操作输入输出内容的时候就需要使用字节或字符流,但是有些时候需要将字符流变为字节流的形式,或者将字节流变为字符流的形式,所以,就需要另外一组转换流的操作类。
转换步骤:
如果以文件操作为例,则在内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件之中,读取的时候需要将读入的字节流通过InputStreamReader变为字符流

在OutputStreamWriter类中需要一个字节流的对象:public OutputStreamWriter(OutputStream out)
例如:将字节的文件输出流,以字符的形式输出。代码如下:
[java] view plain copy
  1. import java.io.* ;  
  2. public class OutputStreamWriterDemo01{  
  3.     public static void main(String args[]) throws Exception {   // 所有异常抛出  
  4.         File f = new File("d:" + File.separator + "test.txt") ;   
  5.         Writer out = null ; // 字符输出流  
  6.         out = new OutputStreamWriter(new FileOutputStream(f)) ; // 字节流变为字符流  
  7.         out.write("hello world!!") ;    // 使用字符流输出  
  8.         out.close() ;  
  9.     }  
  10. };  
读的时候,也可以使用字符流的形式读取字节流的文件。程序代码如下:
[java] view plain copy
  1. import java.io.* ;  
  2. public class InputStreamReaderDemo01{  
  3.     public static void main(String args[]) throws Exception{  
  4.         File f = new File("d:" + File.separator + "test.txt") ;   
  5.         Reader reader = null ;  
  6.         reader = new InputStreamReader(new FileInputStream(f)) ;    // 将字节流变为字符流  
  7.         char c[] = new char[1024] ;  
  8.         int len = reader.read(c) ;  // 读取  
  9.         reader.close() ;    // 关闭  
  10.         System.out.println(new String(c,0,len)) ;  
  11.     }  
  12. };  
但是以上都是以文件操作为例,因为OutputStreamWriter()中的接收类型是OutputStream,只要是字节输出流都可以使用字符的形式操作,而InputStreamReader()中接收的是InputStream,只要是字节的输出流都可以使用字符的输入流操作。

FileWriter和FileReader的说明
从JDK文档中可以知道FileOutputStream是OutputStream的直接子类,FileInputStream也是InputStream的直接子类,但是在字符流文件的两个操作类却有一些特殊,FileWriter并不直接是Writer的子类,而是OutputStreamWriter的子类,而FileReader也不直接是Reader的子类,而是InputStreamReader的子类,那么从这两个类的继承关系就可以清楚的发现,不管是是使用字节流还是字符流实际上最终都是以字节形式操作输出流的。

FileWriter不是Writer的子类,而是转换流的子类。

FileReader也不是Reader的子类,而是转换流的子类。
也就是说,最后不管如何,虽然是以字符的输出流形式操作了字节的输出流,但实际上还是以字节的形式输出,而字符的输入流,虽然以字符的形式操作,但实际上还是使用的字节流,也就是说,传输或者是从文件中读取数据的时候,文件中真正保存的数据永远是字节。

总结:
1、一定要掌握两个转换类的作用。
2、重点:操作的终端点实际上都是以字节的形式进行的。
3、FileWriter和FileReader两个子类的定义,其实是中间使用了转换类。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Java IO的一般使用原则
Java IO流的操作规律
徐葳【2019版最新】40小时掌握Java语言之08IO流
IO与文件读写
《Java程序设计教程》10 Java IO
在Java文件编码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服