天天看點

java 記憶體流(ByteArrayInputStream,ByteArrayOutputStreaem)

1 什麼是記憶體流

當輸出流的目的,和輸入流的源是記憶體時,這樣的流稱之為記憶體流。(就是将資料寫入RAM)

java 記憶體流(ByteArrayInputStream,ByteArrayOutputStreaem)

2 記憶體流的構造方法

1. ByteArrayInputStream(byte buf[]) 建立一個 ByteArrayInputStream 并把指定該輸入流的資料源buf[]。2.

2.ByteArrayOutputStream();建立一個 ByteArrayOutputStream 并把配置設定一個32位元組(預設大小)的緩沖區。

3. ByteArrayOutputStream(int size);  建立一個 ByteArrayOutputStream 并配置設定自定 size 位元組的緩沖區

3 讀取記憶體資料和寫入到記憶體資料

3.1 讀取記憶體資料 

try {
    	String testContent = "ABCDEFG";//程式運作的時候 這資料本身就在記憶體,
    	ByteArrayInputStream bais = new ByteArrayInputStream(testContent.getBytes());//建立記憶體輸入流,指定要讀取的資料 byte[]
    	int read;
    	while ((read = bais.read()) != -1) {//和普通流讀取位元組是一樣的(也可以嵌套管道)
    		System.out.println((char) read);
    	}
    	bais.close();//關閉流,釋放記憶體資源
    }...
           

3.2 寫入資料到記憶體

// ByteArrayOutputStream baos = new ByteArrayOutputStream(int size);//設定内部緩存大小為1。
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();//建立記憶體輸出流,把資料寫入到記憶體中
			String s1 = "hhhhh";
			String s2 = "aaaaa";
			
byte[] b1 = s1.getBytes();
			byte[] b2 = s2.getBytes();


			baos.write(b1);//和普通的輸出流寫輸入一樣,(也可以嵌套管道)
			baos.write(b2);// 将 b2 byte[] 存放到 baos 中緩存
			// 得到 ByteArrayOutputStream 内部的 byte[]中以緩存的數組
			byte[] byteArray = baos.toByteArray();
			String string = baos.toString();
			System.out.println(string);
			baos.flush();
			baos.close();


		} catch (IOException e) {
			e.printStackTrace();
		}
           

4  ByteArrayOutputStream 常用方法:toByteArray(), toString()

1. toByteArray() 方法;是将 ByteArrayOutputStream 對象所寫入到記憶體的資料 轉換成 byte[] 傳回。

2. toString() 方法 ;是将 ByteArrayOutputStream 對象所寫入到記憶體的資料 轉換成 String 傳回。

提示:記憶體流 除了 ByteArrayInputStream 與 ByteArrayOutputStream 主要處理位元組資料之外,對應的還有:

- CharArrayReader 與  CharArrayWriter 主要處理字元數組。

- StringReader 與 StringWriter 主要處理字元串。