26. IO流之內存操作流

IO流之內存操作流

1. 內存操作流概述

如果我們在操作流的時候,不想讓流輸出到文件中,但是又需要對流進行操作,就可以使用內存流來實現輸入與輸出。針對於內存流,java.io 包裏面提供了兩組操作:

  1. 字節內存流:ByteArrayInputStream、ByteArrayOutputStream
  2. 字符內存流:CharArrayReader、CharArrayWriter

兩者在操作上面就類似於 FileInputStream、FileOutputStream 與 FileReader 與 FileWriter

2. 與基礎流OutputStream/InputStream的區別

  1. 以文件操作爲例:
    • 輸出(OutputStream):程序 → OutputStream → 文件;
    • 輸入(InputStream):程序 ← InputStream ← 文件;
  2. 以內存操作爲例:
    • 輸出(ByteArrayInputStream):程序 → ByteArrayInputStream→ 內存;
    • 輸入(ByteArrayOutputStream):程序 ← ByteArrayOutputStream← 內存;
  3. 需要注意的 是程序是運行在內存上的。

3. 測試

str字符串通過ByteArrayInputStream讀取到內存中,然後通過ByteArrayOutputStream將內存中的數據輸出(也就是在程序中)。

/**
 * @Date 2020/6/12 13:18
 * @Version 10.21
 * @Author DuanChaojie
 */
public class TestByteArrayStream {
    public static void main(String[] args) throws IOException {

            // 要被轉換的字符串(相當於程序)
            String str = "hello world";

            // 本次通過內存流操作實現轉換,先將數據保存到內存流當中,然後從中取出每一個數據,
            // 將所有要讀取的數據設置到內存輸入流之中,利用向上轉型
        	// ByteArrayInputStream
            InputStream in = new ByteArrayInputStream(str.getBytes());

            // 爲了能夠將所有內存流數據取出,可以使用ByteArrayOutputStream
            OutputStream out = new ByteArrayOutputStream();

            // 每次讀取一個字節
            int len = 0;

            // 此次循環之後,所有數據都保存在內存輸出流對象之中。
            while ((len = in.read()) != -1) {
                // 字節輸出流
                out.write(Character.toUpperCase(len));
            }
            // HELLO WORLD
            System.out.println(out);

            in.close();
            out.close();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章