JAVA學習筆記——IO流(數據流、內存操作流、打印流、標準輸入輸出流、隨機訪問流)

1.操作基本數據類型的數據流
數據輸入流:DataInputStream
        DataInputStream(InputStream in)
數據輸出流:DataOutputStream
        DataOutputStream(OutputStream out)
   用法和字節流基本一樣,只是該流用來讀寫基本數據類型的數據。

/*
         * 輸出流
         */

        //封裝資源創建對象
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt")) ;

        //寫出數據
        dos.writeByte(100);
        dos.writeShort(99);
        dos.writeInt(98);
        dos.writeLong(97);
        dos.writeFloat(96.96F);
        dos.writeDouble(95.9595);
        dos.writeChar('C');
        dos.writeBoolean(false);

        //釋放資源
        dos.close();    

        /*
         * 輸入流
         */

        //封裝資源創建對象
        DataInputStream dis = new DataInputStream(new FileInputStream("dos.txt")) ;

        //讀取數據,必須按照順序讀
        byte b = dis.readByte() ; //100
        short s = dis.readShort() ;//99
        int i = dis.readInt() ;//98
        long l = dis.readLong() ;//97
        float f = dis.readFloat() ;//96.96
        double d = dis.readDouble() ;//95.9595
        char c = dis.readChar() ;//C
        boolean bb = dis.readBoolean() ;//false

        //釋放資源
        dis.close();

        System.out.println(b+"\n"+s+"\n"+i+"\n"+l+"\n"+f+"\n"+d+"\n"+c+"\n"+bb);

2.內存操作流 :用於處理臨時存儲信息的,程序結束,數據就從內存中消失(因此內存流的close()方法是無意義的)

  字節數組:
    ByteArrayInputStream:
    ByteArrayOutputStream:
  字符數組:
    CharArrayReader:
    CharArrayWriter:
  字符串:
    StringReader:
    StringWriter:

        /*
         * 字節數組,(字符數組和字符串用法類似)
         */
        //寫入數據
        ByteArrayOutputStream bos = new ByteArrayOutputStream() ;

        for (int i = 0; i < 10 ; i++) {
            bos.write(("hello"+i).getBytes());
        }
        //因爲是存在內存中,所以無法查看
        //查看源碼可以知道,close()沒有執行任何操作,是無意義的,因此可以不需要
        //bos.close();

        byte[] by = bos.toByteArray() ;

        //讀取數據
        ByteArrayInputStream bis = new  ByteArrayInputStream(by) ;

        int b = 0 ;
        while((b = bis.read()) != -1){
            System.out.print((char)b);
        }

        //bis.close();

3.打印流
  字節打印流:PrintStream
  字符打印流:PrintWrite
    
  打印流的特點:
    A:只有些數據的流,沒有讀取數據的,只能操作目的地址,不能操作數據源
    B:可以操作任意類型的數據
      使用其特殊的方法
        print()
        println()
    C:如果啓動了自動刷新,能夠自動更新。
       PrintWriter pw = new PrintWriter(new FileWriter(“pw.txt”),true) ;
       但是必須要調用println()方法,這樣不僅能實現自動刷新,還能實現換行。
       即println()一句等價於以下三句:
         bw.write() ;
         bw.nextLine() ;
         bw.flush() ;
    D:該流是可以直接操作文本文件的。
      哪些對象是可以直接操作文本文件的呢?
        FileOutputStream
        FileInputStream
        FileReader
        FileWriter
        PrintWriter
        PrintStream
         注意:看API,如果構造方法裏同時有File類型的和String類型的參數,一般來說可以直接操作文件

    根據是否可以直接操作文件,可以把流分爲:
      基本流:可以直接讀寫文件
      高級流:在基本流的基礎上提供了一些其他功能

4.標準輸入輸出流
System類中的兩個成員變量:
  public static final InputStream in : ”標準“輸入流
  public static final PrintStream out :“標準”輸出流

    由上可知,
    InputStream is = System.in ;
    PrintStream ps = System.out ;
    System.in的本質其實就是InputStream is
    System.out的本質其實就是PrintStream ps
  所以我們可以知道
  System.out.println() = ps.println()
  而System.out.print不存在的原因是因爲 ps.print()不存在

 三種鍵盤錄入方式:
   A:main()方法的args接收參數
   B:Scanner(JDK5以後)
     Scanner input= new Scanner(System.in) ;
     String s = input.nextLine() ;
     int x = input.nextInt() ;
     ..
   C:通過字符緩衝流包裝標準輸入流實現
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;

5.隨機訪問流

發佈了20 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章