zoukankan      html  css  js  c++  java
  • IO流小结


    一、步骤:

           创建源 选择流 操作(读取|写出) 释放

    二、流

    节点流:  离数据源|程序最近的流

    处理流:  装饰模式 提高性能增强功能

    1、 字节流: 可以处理一切(纯文本、音频、视频等)

    1)、输入流 InputStream:FileInputStream  ByteArrayInputStream 
    操作: read(字节数组)
          a)、中间容器 byte[] flush=new byte[长度]
          b)、接收长度 int len =0;
          c)、循环读取 while(-1!=(len=流.read(flush))){}
          d)、操作:输出、拷贝
    2)、输出流 OutputStream:FileOutputStream  ByteArrayOutputStream
    操作: write(字节数组,0,长度) 输出

    2、 字符流:只能处理纯文本

    1)、输入流:Reader:FileReader
    操作: read(字符数组)
           a)、中间容器 char[] flush=new char[长度]
      b)、接收长度 int len =0;
      c)、循环读取 while(-1!=(len=流.read(flush))){}
      d)、操作:输出、拷贝
    2)、输出流:Writer:FileWriter
    操作: write(字符数组,0,长度) 输出


    3、 转换流:解码与编码字符集问题

      1)、输入流:InputStreamReader 【<—— 从里到外读,把输入的字节流解码成字符流

    BufferedReader reader =          
                    new BufferedReader(
                            new InputStreamReader(new URL("http://www.baidu.com").openStream(),"UTF-8"));

      2)、输出流:OutputStreamWriter【从外到里 写——>,把字符流编码成字节流输出到控制台或硬盘

    BufferedWriter writer =     
                        new BufferedWriter(
                                new OutputStreamWriter(new FileOutputStream("baidu.html"),"UTF-8"));)


    4、缓冲流:提高性能

      1)、输入流:BufferedInputStream BufferedReader
      2)、输出流:BufferedOutputStream BufferedWriter


    5、数据流:处理数据+类型

    1)、基本+字符串:必须存在才能读取 读取与写出顺序一致
           a)、输入流:DataInputStream readXxx
           b)、输出流:DataOutputStream writeXxx
    2)、引用类型:Serializable transient
           a)、反序列化:ObjectInputStream readObject
           b)、序列化:ObjectOutputStream writeObject


    6、打印流: PrintStream

    import java.io.BufferedOutputStream;
    import java.io.FileDescriptor;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    
    public class TestPrintStream {
        public static void main(String[] args) throws FileNotFoundException {
            PrintStream ps = System.out;
            //默认打印到控制台
            ps.println("控制台-28哈哈");
            ps.println("控制台-"+123);
            
            //重新定义输出流
            ps = new PrintStream(new BufferedOutputStream(new FileOutputStream("print.txt")),true);  //true表示自动刷新
            ps.println("从这里开始打印到文件");
            ps.println(false);
    //        ps.close();
            
            System.out.println("这里还是打印到控制台");
            System.out.println();
            
            //重定向输出端
            System.setOut(ps);
            System.out.println("这是重定向打印");
            System.out.println("这是重定向打印2");
            
            
            //重定向回 控制台
            System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true));
            System.out.println("重定向回来了");
            
            
        }
    }

    7、System.in out err setIn setOut

    以下流使用新增方法不能发生多态【重要】

      1、 ByteArrayOutputStream: toByteArray()

      2、 BufferedReader: readLine()

      3、 BufferedWriter:newLine()

      4、 DataInputStream    DataOutputStream

      5、 ObjectInputStream    ObjectOutputStream

      6、 PrintStream

  • 相关阅读:
    2016年5月27日上午(妙味课堂js基础-3笔记一(事件))
    2016年5月26日晚上(妙味课堂js基础-2笔记四(BOM))
    2016年5月26日晚上(妙味课堂js基础-2笔记三(DOM))
    2016年5月26日晚上(妙味课堂js基础-2笔记二(DOM))
    2016年5月26日下午(妙味课堂js基础-2笔记一(DOM))
    2016年5月26日下午(妙味课堂js基础-1笔记四)
    2016年5月26日下午(妙味课堂js基础-1笔记三)
    2016年5月26日上午(妙味课堂js基础-1笔记二)
    【Django】不知道为什么就是想学一下 01
    【Ubuntu】安装Java和Eclipse
  • 原文地址:https://www.cnblogs.com/timetellu/p/11519910.html
Copyright © 2011-2022 走看看