檔案操作流能夠實作對檔案内容的讀寫操作,若是碰到了不希望産生檔案的IO操作,顯然是不能實作的,此時就需要用到記憶體操作流程。本節将為讀者介紹記憶體操作流的相關知識。
【本節目标】
通過閱讀本節内容,你将進一步了解到IO流操作的過程,了解到記憶體操作流相關類的繼承體系,并能夠借助這些類實作以記憶體為終端的IO操作。
記憶體操作流
在之前使用的全部都是檔案操作流,檔案操作流的特點:程式利用InputStream讀取檔案内容,而後程式利用OutputStream向檔案輸出内容,所有的操作都是以檔案為終端的。

檔案流
假設說現在需要實作IO操作,可是又不希望産生檔案(臨時檔案),則就可以以記憶體為終端進行處理,這個時候的流程為:
記憶體流
在Java裡面提供有兩類的記憶體操作流:
- 位元組記憶體操作流:ByteArrayOutputStream、ByteArrayInputStream
- 字元記憶體操作流:CharArrayWriter、CharArrayReader
ByteArrayOutputStream
ByteArrayInputStream
CharArrayWriter
CharArrayReader
下面以ByteArrayOutputStream和ByteArrayInputStream類為主進行記憶體的使用分析,首先分析各自的構造方法:
ByteArrayInputStream構造:public ByteArrayInputStream(byte[] buf);
ByteArrayOutputStream構造:public ByteArrayOutputStream();
在ByteArrayOutputStream類裡面有兩個重要的方法,這些方法可以擷取全部儲存在記憶體流中的資料資訊,該方法為:
擷取資料:public byte[] toByteArray();
使用字元串的形式擷取:public String toString();
範例:利用記憶體流實作一個小寫字母轉大寫字母的操作
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayInputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
String str="www.mldn.cn"; //小寫字母
InputStream input=new ByteArrayInputStream(str.getBytes()); //将資料儲存到記憶體流
OutputStream output=new ByteArrayOutputStream();//讀取記憶體中的資料
int data = 0;
while ((data = input.read())!= -1){ //每次讀取一個位元組
output.write(Character.toUpperCase((char)data)); //儲存資料
}
System.out.println(output); //WWW.MLDN.CN
input.close();
output.close();
}
}
如果不希望隻是以字元串的形式傳回,因為可能存放的是其它二進制的資料,那麼此時就可以利用ByteArrayOutputStream子類的擴充功能擷取全部位元組資料。
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayInputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
String str="www.mldn.cn";
InputStream input=new ByteArrayInputStream(str.getBytes());//将資料儲存在記憶體流
//必須使用子類來調用子類自己的擴充方法
ByteArrayOutputStream output=new ByteArrayOutputStream();//讀取記憶體中的資料
int data=0;
while ((data=input.read())!= -1){//每次讀取一個位元組
output.write(Character.toUpperCase((char)data));//儲存資料
}
byte result []=output.toByteArray(); //擷取全部資料
System.out.println(new String(result)); //自己處理位元組資料,結果:WWW.MLDN.CN
input.close();
output.close();
}
}
在最初的時候,可以利用ByteArrayOutputStream實作大規模文本檔案讀取。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:使用管道流建構線程資訊通道 | 帶你學《Java語言進階特性》之六十二 更多Java面向對象程式設計文章檢視此處