No.19 字節(jié)數(shù)組流

java.IO中提供了ByteArrayInputStream/ByteArrayOutputStream字節(jié)數(shù)組輸入輸出流。
其實(shí)質(zhì)是在用,數(shù)組的思想來操作讀寫操作。

在進(jìn)行IO操作的時(shí)候我們可以大概分為三個(gè)對(duì)象:
控制臺(tái):System.in/System.out
硬盤:FileStream(包括字節(jié)流和字符流輸入輸出)
內(nèi)存:ArrayStream(包括字節(jié)流中的ByteArray,字符流中的CharArray)。


ByteArrayOutputStream的用法:

(1)ByteArrayOutputStream,從某一輸入流中獲取字節(jié)數(shù)據(jù),調(diào)用write(int var)方法寫入內(nèi)部緩沖區(qū)。此方法由于沒有操作底層數(shù)據(jù)所以不許要關(guān)閉流,即使被關(guān)閉也可以再次被調(diào)用。
(2)ByteArrayOutputStream有兩個(gè)構(gòu)造參數(shù),空參數(shù)的構(gòu)造參數(shù)提供一個(gè)默認(rèn)的可變的緩沖區(qū),另一構(gòu)造參數(shù)OutputStream out = new ByteArrayOutputStream(int a)提供一個(gè)指定大小的緩沖區(qū)的初始值。
(3)public byte[] toByteArray()/public String toString()兩個(gè)方法提供了將緩沖區(qū)內(nèi)容輸出的方法。
(4)public void writeTo(OutputStream os)提供了將緩沖去內(nèi)的內(nèi)容一次性寫入一個(gè)輸出流中的方法,這里可以是硬盤也可以是控制臺(tái)。
(5)實(shí)例:

public class Test {

public static void main(String[] args) {
    ByteArrayInputStream bis = null;
    ByteArrayOutputStream bos = null;
    
    bis = new ByteArrayInputStream("ABCDEFG".getBytes());
    //這里不指定緩沖區(qū)大小。
    bos = new ByteArrayOutputStream();//初始化長(zhǎng)度為0
    //這里指定緩沖區(qū)大小
    //bos = new ByteArrayOutputStream(1);//初始化長(zhǎng)度為1
    
    int b = 0;
    while((b = bis.read()) != -1){
        bos.write(b);
    }
    
    //寫入緩沖區(qū)后可以查看緩沖區(qū)大小,也可以查看緩沖區(qū)內(nèi)容
    System.out.println(bos.size());//7
    byte[] be = bos.toByteArray();
    for(byte bt : be){
        System.out.print(bt + " ");//65 66 67 68 69 70 71 
    }
    System.out.println();
    System.out.println(bos.toString());//ABCDEFG
    //將緩沖區(qū)內(nèi)寫入一個(gè)outputStream流中字節(jié)數(shù)組流中只有這個(gè)方法會(huì)報(bào)異常
    try {
        bos.writeTo(new FileOutputStream("d://text.txt"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }
}

ByteArrayInputStream的用法:

(1)ByteArrayInputStream對(duì)象接受一個(gè)字節(jié)數(shù)組作為參數(shù)。如果需要存放的數(shù)據(jù)很多可以提前聲明一個(gè)指定大小的數(shù)組,如果不多可以直接同過相應(yīng)的轉(zhuǎn)化獲取如:string類的getByte()方法。
(2)該字節(jié)數(shù)組的內(nèi)容來源可以是一個(gè)文件的輸入流中數(shù)據(jù),通過read(buf)方法得到的字節(jié)數(shù)據(jù),也可同過string類的getByte()方法直接的的到一個(gè)。
(3)字節(jié)數(shù)組輸如流的的操作方法同其他輸入流一樣,通過循環(huán)判斷read返回值來輸出數(shù)組中的內(nèi)容,每次從緩沖buf中獲取一個(gè)字節(jié)數(shù)據(jù)。

(4)應(yīng)用實(shí)例:

public class Test {

public static void main(String[] args) {
    FileInputStream fis= null;
    ByteArrayInputStream bis = null;
    
    try {
        fis = new FileInputStream("D://text.txt");
        //確定緩沖區(qū)數(shù)組大小
        byte[] buf = new byte[512];
        bis = new ByteArrayInputStream(buf);
        //將文件寫入緩存區(qū),調(diào)用fileInputSream的read(Byte[] b)方法
        fis.read(buf);
        //讀取ByteArrayInputStream緩沖區(qū)數(shù)組中的內(nèi)容
        int i = 0;
        while((i = bis.read()) != -1){
            System.out.println((char)i);
        }
        //不用關(guān)閉bis流
        fis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  }
}

總結(jié)

(1)從繼承關(guān)系來看字節(jié)數(shù)組流直接繼承自基類InputStream和OutputStream,他起到的作用看來起到了 裝飾/提高效率的作用。
(2)這兩個(gè)IO類,其實(shí)起到了從控制臺(tái),或者硬盤(文件)讀取流到內(nèi)存中的作用。
FileInputStream -> ByteArrayOutputStream ->FileOutputsStream
FileInputStream -> ByteArrayInputStream ->System.out

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java 流在處理上分為字符流和字節(jié)流。字符流處理的單元為 2 個(gè)字節(jié)的 Unicode 字符,分別操作字符、字符...
    布魯斯不吐絲閱讀 763評(píng)論 0 4
  • 1 IO(三)No20 1.1Properties 屬性集 【 Properties屬性集,主要用于操作配置屬...
    征程_Journey閱讀 970評(píng)論 0 1
  • 1 I/O流的分類 按照流:輸入流輸出流輸出流 按照數(shù)據(jù)處理單位不同 字節(jié)流一次讀入或者是讀取八位二進(jìn)制,后綴為...
    司鑫閱讀 2,583評(píng)論 0 4
  • 因?yàn)榘俣鹊募虞d動(dòng)畫不是經(jīng)常出現(xiàn),以前就想做一個(gè),今天有時(shí)間做了一個(gè)類似效果的加載動(dòng)畫,給大家分享一下。 這是百度的...
    但但但丶閱讀 1,307評(píng)論 1 5
  • 殘雪浸瑤瓊,尺素侵幽靜。閑向梅花樹下行,步月尋疏影。 縹緲掩娉婷,姿綽絕妝靚。白露絲寒鎖暗香,水闊霜華冷
    風(fēng)十二闌閱讀 836評(píng)論 4 7

友情鏈接更多精彩內(nèi)容