Java IO 之ByteArrayInputStream & ByteArrayOutputStream

 

一、ByteArrayOutputStream

ByteArrayOutputStream(int size) 創建一個新的 byte 數組輸出流,它具有指定大小的緩衝區容量(以字節爲單位)。

此類實現了一個輸出流,緩衝區會隨着數據的不斷寫入而自動增長。可使用 toByteArray()和 toString()獲取數據。

關閉 ByteArrayOutputStream 無效。此類中的方法在關閉此流後仍可被調用,而不會產生任何IOException。

ByteArrayOutputStream常用於存儲數據以用於一次寫入

 

二、ByteArrayInputStream

ByteArrayInputStream(byte[] buf) 創建一個 ByteArrayInputStream,使用 buf 作爲其緩衝區數組。

作用:把字節串/字節數組轉換成一種輸入流的形式,這樣就可以被高級輸入工具DataInputStream直接處理,比如處理成各種類型,double,float,char,int, short,long,或任何對象,或字符串,或媒體數據。把一塊內存作爲輸入的一種方式。用處很多。

個人認爲一個比較好的用途是在網絡中讀取數據包,由於數據包一般是定長的,我們可以先分配一個夠大的byte數組,比如byte buf[]=new byte[1024];

然後調用某個方法得到網絡中的數據包,例如:

Socket s=...;

DataInputStream dis=new DataInputStream(s.getInputStream());

dis.read(buf);//把所有數據存到buf中

ByteArrayInputStream bais=new ByteArrayInputStream(buf); //把剛纔的部分視爲輸入流

DataInputStream dis_2=new DataInputStream(bais);

//現在可以使用dis_2的各種read方法,讀取指定的字節

上面的示例的兩次包裝看上去有點多此一舉,但使用ByteArrayInputStream的好處是關掉流之後它的數據仍然存在。

 

import java.io.*;
public class ByteStreamTest {
	public static void main(String[] args)throws Exception {
		
		ByteArrayOutputStream bOutput = new ByteArrayOutputStream(8);
		byte[] b = "abcde".getBytes();
		bOutput.write(b);
		for(int x=0; x<b.length; x++){
			System.out.print((char)b[x] +" ");
		}
		System.out.println(" ");
		
		ByteArrayInputStream bInput = new ByteArrayInputStream(b);
		System.out.println("轉換成大寫字母后");
		int c;
		for(int y=0; y<1; y++){
			// 注意:這裏我們一個一個字節的讀
			while((c=bInput.read())!=-1){
				System.out.print(Character.toUpperCase((char)c)+" ");
			}
			bInput.reset();
		}	
	}
}

 a b c d e  

轉換成大寫字母后

A B C D E 

 

參考:http://blog.csdn.net/rcoder/article/details/6118313

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