IO流之內存操作流
1. 內存操作流概述
如果我們在操作流的時候,不想讓流輸出到文件中,但是又需要對流進行操作,就可以使用內存流來實現輸入與輸出。針對於內存流,
java.io 包
裏面提供了兩組操作:
- 字節內存流:
ByteArrayInputStream、ByteArrayOutputStream
- 字符內存流:
CharArrayReader、CharArrayWriter
兩者在操作上面就類似於
FileInputStream、FileOutputStream 與 FileReader 與 FileWriter
。
2. 與基礎流OutputStream/InputStream
的區別
- 以文件操作爲例:
輸出(OutputStream):程序 → OutputStream → 文件;
輸入(InputStream):程序 ← InputStream ← 文件;
- 以內存操作爲例:
輸出(ByteArrayInputStream):程序 → ByteArrayInputStream→ 內存;
輸入(ByteArrayOutputStream):程序 ← ByteArrayOutputStream← 內存;
- 需要注意的 是程序是運行在內存上的。
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();
}
}