我們要知道,流的來源和目的地除了可以是檔案以外,還可以是電腦記憶體。
位元組數組輸入流ByteArrayInputStream和位元組數組輸出流ByteArrayOutputStream分別使用位元組數組作為流的來源和目的地。
ByteArrayInputStream(byte[]buf);ByteArrayInputStream(byte[]buf,intoffset,intlength);
第一個建構方法構造的位元組數組流的來源是參數buf指定的數組的全部位元組單元;第二個構造方法構造的位元組數組流的來源是buf指定的數組從offset處按順序取的length個位元組單元。
位元組數組輸入流呼叫public int read();方法可以順序地從來源讀出一個位元組,該方法傳回讀出的位元組值;呼叫public int read(byte[] b,int off,int len );方法可以順序地從來源中讀出參數len指定的位元組數,並將讀出的位元組存放到參數b指定的數組中,參數off指定數組b存放讀出位元組的起始位置,此方法傳回實際讀出的位元組個數,如果未讀出位元組read方法回傳-1。
ByteArrayOutputStream();ByteArrayOutputStream(intsize);
第一個建構方法建構的位元組數組輸出流指向一個預設大小為32位元組的緩衝區,如果輸出流向緩衝區寫入的位元組個數大於緩衝區時,緩衝區的容量會自動增加。
第二個建構方法建構的位元組數組輸出流指向的緩衝區的初始大小由參數size指定,如果輸出流向緩衝區寫入的位元組個數大於緩衝區時,緩衝區的容量會自動增加。
位元組數組輸出流呼叫public void write(int b);方法可以依序寫入緩衝區為緩衝區;呼叫public void write(byte[] b,int off,int len);方法可以將參數b中指定的len個位元組順序地寫入緩衝區,參數off指定從b中寫出的位元組的起始位置;呼叫public byte[] toByteArray();方法可以傳回輸出流寫入到緩衝區的全部位元組.
與位元組數組流對應的是字元數組流CharArrayReader類別和CharArrayWriter類,字元數組流分別使用字元數組作為流的來源和目標。
例如,使用數組流向內存(輸出流的緩衝區)寫入“mid-autumn festival”和“中秋快樂”,然後再從內存讀取曾寫入的數據:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){try{ByteArrayOutputStreamoutByte=newByteArrayOutputStream();byte[]byteContent=mid-autumnfestival.getBytes(); ByteArray ());bytebackByte[]=newbyte[outByte.toByteArray().length];inByte.read(backByte);System.out.println(newString(backByte));CharArrayWriteroutChar=newCharArrayWriter(newString(backByte));CharArrayWriteroutChar=newCharArrayWriter();快樂.toCharArray();outChar.write(charContent);CharArrayReaderinChar=newCharArrayReader(outChar.toCharArray());charbackChar[]=newchar[outChar.toCharArray().length];inChar.read(backChar);System.out. println(newString(backChar));}catch(IOExceptionexp){}}}