IO流操作规律 转码

/*
  
  IO流操作基本规律:
  
  1、明确源和目的
   源:输入流。InputStream Reader
   目的:输出流。OutputStream Writer
   
  2、操作的数据是否是纯文本?
   是:字符流
   不是:字节流。
   
  3、当体系明确后,再明确要使用哪个具体的对象。
   通过设备来进行区分:
   源设备:内存、硬盘、键盘
   目的设备:内存、硬盘、控制台
 
 
  
  /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
 /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
 
 
 
 例1、将一个文本文件中的数据存储到另一个文件中,复制文件。
 
 分析:
 -----------------------------------------------
 源:以为是源,所以使用读取流。InputStream Reader
 是不是操作文本文件?
 是,这时就选择Reader
 这样体系就明确了。
 -----------------------------------------------
 接下来,明确要使用该类体系的哪个对象。
 明确设备:硬盘 上的一个文件。
 Reader 体系中可以操作文件的对象时FileReader
 // FileReader fr = new FileReader("a.txt");
 
 是否需要提高效率呢?
 是。加入Reader体统中的缓冲区 BufferedReader
 //BufferedReader bufr = new BufferedReader(fr);
  
 ===============================================
 
 目的:OutputStream 一个文件
 是否是纯文本?
 是。Writer
 设备:硬盘 一个文件
 Writer体系中可以操作问价的对象FileWriter
 // FileWriter fw = new FileWriter("b.txt");
  
 是否需要提高效率?
 是。加入Writer体系的缓冲区 BufferedWriter
 //BufferedWriter bufw = new BufferedWriter(fw);
  
 
*/ 
//标准录入输出
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
//文本文件到文件(复制)
//!!!注意:
//将字节流转为字符流的目的:方便操作,可以调用BufferedReader的readLine()方法整行读取。
BufferedWriter分行可调用newLine()方法。而非添加"\r\n"这个不跨平台!
BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\Demo.txt"),"UTF-8"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:"+File.sepatator+"b.txt"),"GBK"));
转换流:
InputStreamReader、OutStreamReader,在涉及到编码时,必须使用!

  ------------------------------------------------------ --------------------------------------------------------

类 InputStreamReader

java.lang.Object
  java.io.Reader
      java.io.InputStreamReader
  • 直接已知子类:

  • FileReader

  • public class InputStreamReader extends
InputStreamReader(InputStream in)
          创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
          创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
          创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
          创建使用指定字符集的 InputStreamReader。

 ------------------------------------------------------- -------------------------------------------------------

类 OutputStreamWriter

java.lang.Object
  java.io.Writer
      java.io.OutputStreamWriter
  • 直接已知子类:

  • FileWriter

  • public class OutputStreamWriter extends
构造方法摘要
OutputStreamWriter(OutputStream out)
          创建使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)
          创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
          创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
          创建使用指定字符集的 OutputStreamWriter。

 


 个人总结:

    1、java.IO包中的类 四个顶级抽象类:Reader    Writer    InputStream    OutputStream

        它们的子类都是由两个"单词"组成,第一个"单词"是功能,第二个"单词"表示所属的类

    2、字符流:专门用来处理文本。

         字节流:通吃。文本需要编码解码时必须使用!

    3、高效的Buffered

        BufferedReader、BufferedWriter 、BufferedInputStream、BufferedOutputStream ,专门用来提高效率,作为装饰类,用来处理相应的流对象,使其功能增强。Buffered修饰的流类具有的readLine()方法,就是提高了原有流对象read()读取单个字符的效率。

    注意:readLine()返回的是String类型,读完时返回 null;

                而int read()读取的是字符或字节,返回的是读到的字符或字节的int类型的值;

                而int read(参数)参数是字符数组或字节数组,将读到的字符或字节(从offf下标开始存入,长度为len的)数组,返回实际存入的字符数。

     4、转码——字符流和字节流之间的桥梁

    InputStreamReader —— 从字节流到字符流 

    OutputStreamWriter —— 从字符流到字节流


    字节流中的数据都是字符时,转成字符流操作更高效。


    5、个人发现:

        读:    字符流    <-----------     字节流 

        写:    字符流    ----------->     字节流 

 

 

 

转载于:https://my.oschina.net/cuncaojin/blog/371401

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值