zoukankan      html  css  js  c++  java
  • Java & IO流

    转换流:
    InputStreamReader :字节到字符的桥梁。解码。
    OutputStreamWriter:字符到字节的桥梁。编码。
     
    流的操作规律:
    之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适。
     
    想要知道开发时用到哪些对象。只要通过四个明确即可。
     
    1,明确源和目的(汇)
    源:InputStream  Reader
    目的:OutputStream  Writer
     
    2,明确数据是否是纯文本数据。
    源:是纯文本:Reader
    否:InputStream
    目的:是纯文本 Writer
    否:OutputStream
     
    到这里,就可以明确需求中具体要使用哪个体系。
     
    3,明确具体的设备。
    源设备:
    硬盘:File
    键盘:System.in
    内存:数组
    网络:Socket流
     
    目的设备:
    硬盘:File
    控制台:System.out
    内存:数组
    网络:Socket流
     
    4,是否需要其他额外功能。
    1,是否需要高效(缓冲区);
    是,就加上buffer.
    2,转换。
     
     
     
    需求1:复制一个文本文件。
    1,明确源和目的。
    源:InputStream Reader
    目的:OutputStream  Writer
    2,是否是纯文本?
    是!
    源:Reader
    目的:Writer
     
    3,明确具体设备。
    源:
    硬盘:File
    目的:
    硬盘:File
     
    FileReader fr = new FileReader("a.txt");
    FileWriter fw = new FileWriter("b.txt");
     
    4,需要额外功能吗?
    需要,需要高效。
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));
     
    ================================================
     
    需求2:读取键盘录入信息,并写入到一个文件中。
     
    1,明确源和目的。
    源:InputStream Reader
    目的:OutputStream  Writer
    2,是否是纯文本呢?
    是,
    源:Reader
    目的:Writer
    3,明确设备
    源:
    键盘。System.in
    目的:
    硬盘。File
     
    InputStream in = System.in;
    FileWriter fw = new FileWriter("b.txt");
    这样做可以完成,但是麻烦。将读取的字节数据转成字符串。再由字符流操作。
    4,需要额外功能吗?
    需要。转换。 将字节流转成字符流。因为名确的源是Reader,这样操作文本数据做便捷。
    所以要将已有的字节流转成字符流。使用字节-->字符 。InputStreamReader
    InputStreamReader isr = new InputStreamReader(System.in);
    FileWriter fw = new FileWriter("b.txt");
     
    还需要功能吗?
    需要:想高效。
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));
     
     
     
    ===================================================
     
    需求3:将一个文本文件数据显示在控制台上。
    1,明确源和目的。
    源:InputStream Reader
    目的:OutputStream  Writer
    2,是否是纯文本呢?
    是,
    源:Reader
    目的:Writer
    3,明确具体设备
    源:
    硬盘:File
    目的:
    控制台:System.out
     
    FileReader fr = new FileReader("a.txt");
    OutputStream out = System.out;//PrintStream
    4,需要额外功能吗?
    需要,转换。
    FileReader fr= new FileReader("a.txt");
    OutputStreamWriter osw = new OutputStreamWriter(System.out);
    需要,高效。 
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
     
    ================================================================
     
    需求4:读取键盘录入数据,显示在控制台上。
    1,明确源和目的。
    源:InputStream Reader
    目的:OutputStream  Writer
    2,是否是纯文本呢?
    是,
    源:Reader
    目的:Writer
    3,明确设备。
    源:
    键盘:System.in
    目的:
    控制台:System.out
     
    InputStream in = System.in;
    OutputStream out = System.out;
     
    4,明确额外功能?
    需要转换,因为都是字节流,但是操作的却是文本数据。
    所以使用字符流操作起来更为便捷。
    InputStreamReader isr = new InputStreamReader(System.in);
    OutputStreamWriter osw = new OutputStreamWriter(System.out);
     
    为了将其高效。
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
     
     
    ============================================================
     
    5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中.
     
    1,目的。OutputStream,Writer
    2,是纯文本,Writer。
    3,设备:硬盘File 
    FileWriter fw = new FileWriter("a.txt");
    fw.write("你好"); 
     
    注意:既然需求中已经明确了指定编码表的动作。
    那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。
    只能使用其父类。OutputStreamWriter.
    OutputStreamWriter接收一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream
     
    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);
     
    需要高效吗?
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName));
     
    什么时候使用转换流呢?
     
    1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。
    提高对文本操作的便捷。
    2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。
  • 相关阅读:
    Atitit.随时间变色特效 ---包厢管理系统的规划
    Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
    Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
    atitit.薄伽梵歌overview  attilax 读后感
    Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
    Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
    atitit.薄伽梵歌overview  attilax 读后感
    Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
    Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
    Atitit.执行cli cmd的原理与调试
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8310823.html
Copyright © 2011-2022 走看看