• 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,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。
  • 相关阅读:
    浅谈 Linux 下的 SSH1, SSH2
    jquery replace方法去空格
    CakePHP Configure::read('KHCITY') 数据配置读取
    php中::是什么意思?
    CakePHP redirect函数
    Redis介绍
    Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络
    [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5
    Solution for When browse http://xxx/ReportServer Show Error (rsAccessDenied)
    Windows Server 2008 R2 配置AD(Active Directory)域控制器 -zhai zi wangluo
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8310823.html
Copyright © 2020-2023  润新知