天天看點

運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

上一篇:教你用不同的編碼标準解碼字元 | 帶你學《Java語言進階特性》之六十

檔案操作流能夠實作對檔案内容的讀寫操作,若是碰到了不希望産生檔案的IO操作,顯然是不能實作的,此時就需要用到記憶體操作流程。本節将為讀者介紹記憶體操作流的相關知識。

【本節目标】

通過閱讀本節内容,你将進一步了解到IO流操作的過程,了解到記憶體操作流相關類的繼承體系,并能夠借助這些類實作以記憶體為終端的IO操作。

記憶體操作流

在之前使用的全部都是檔案操作流,檔案操作流的特點:程式利用InputStream讀取檔案内容,而後程式利用OutputStream向檔案輸出内容,所有的操作都是以檔案為終端的。

運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

檔案流

假設說現在需要實作IO操作,可是又不希望産生檔案(臨時檔案),則就可以以記憶體為終端進行處理,這個時候的流程為:

運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

記憶體流

在Java裡面提供有兩類的記憶體操作流:

  • 位元組記憶體操作流:ByteArrayOutputStream、ByteArrayInputStream
  • 字元記憶體操作流:CharArrayWriter、CharArrayReader
運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

ByteArrayOutputStream

運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

ByteArrayInputStream

運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

CharArrayWriter

運用記憶體操作流實作IO操作 | 帶你學《Java語言進階特性》之六十一

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面向對象程式設計文章檢視此處