內存操作流 ByteArrayInputStream和ByteArrayOutputStream(四)

勿以惡小而爲之,勿以善小而不爲--------------------------劉備
勸諸君,多行善事積福報,莫作惡

上一章簡單介紹了字符流Reader和Writer(三),如果沒有看過,請觀看上一章

以前我們都是將內容寫入到文件裏面,從文件裏面讀取內容,都是對具體的文件進行操作,所用的是FileOutputStream和FileInputStream.

其實,我們還可以將內容寫入到內存裏面,從內存裏面讀取相應的內容, 以內存爲中介,進行存儲和讀取。 但是,內存一斷電就沒有了,不能存儲,但是速度快。 內存,用的是 ByteArray, 所以對應的流就是 ByteArrayOutputStream 和ByteArrayInputStream.

一 ByteArrayOutputStream

一.一 方法

一.一.一 構造方法

一.一.一.一 方法

方法 作用
ByteArrayOutputStream​() 創建內存輸出流,默認大小爲32
ByteArrayOutputStream​(int size) 創建內存輸出流,自定義緩衝區的大小

一.一.一.二 演示

 @Test
    public void conTest(){
        //默認是32
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(32);

    }

一.一.二 普通讀寫方法

方法 作用
void close() 關閉一個 ByteArrayOutputStream沒有任何效果。
void write​(int b) 將單個字節 寫入到內存中
void write​(byte[] b, int off, int len) 將字節數組寫入到內存裏面
writeTo​(OutputStream out) 將內存中的數組讀取出來,放置到輸出流裏面,
即往輸出流裏面輸入內存中的數據
byte[] toByteArray​() 將內存中的數據讀取出來,然後封裝成一個字節數組,返回該字節數組
String toString​(String charsetName) 將內存中的數據讀取出來,封裝成一個字符串,返回該字符串

一.二 演示內存輸出流

一.二.一 輸出到字節數組和字符串

   @Test
    public void writer1Test() throws Exception{

        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(32);

        //內存
        byte[] b="你好啊,我是兩個蝴蝶飛".getBytes("utf-8");

        //將內容寫入到內存裏面。
       byteArrayOutputStream.write(b);

        //讀出內容,封裝成字節數組,可用於圖片和視頻

       byte[] bytes= byteArrayOutputStream.toByteArray();

        System.out.println("字節輸出內容:"+new String(bytes,"UTF-8"));

        //關閉是沒有效果的
        byteArrayOutputStream.close();

        //讀出內容,封裝成字符串
        String content=byteArrayOutputStream.toString("UTF-8");
        System.out.println("字符串輸出內容:"+content);

    }

運行,控制檯打印輸出:

有圖片

一.二.二 輸出到文件輸出流

Hello3.txt 目前的內容爲:

有圖片

  @Test
    public void writer2Test() throws Exception{

        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(32);


        byte[] b="你好啊,我是兩個蝴蝶飛".getBytes("utf-8");


        //寫入到內存裏面
        byteArrayOutputStream.write(b);

        //定義文件
        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"Hello3.txt");

        //這個文件存在
        OutputStream outputStream=new FileOutputStream(file,true);

        //從內存裏面讀取內容,放置到輸出流
        byteArrayOutputStream.writeTo(outputStream);

        outputStream.close();

        byteArrayOutputStream.close();
    }

運行程序,查看 Hello3.txt 的內容

有圖片

二. ByteArrayInputStream

二.一 方法

二.一.一 構造方法

二.一.一.一 方法

方法 作用
ByteArrayInputStream​(byte[] buf) 將字節數組放置到內存裏面
ByteArrayInputStream​(byte[] buf, int offset, int length) 將字節數組的一部分放置到內存裏面

二.一.一.二 演示

 @Test
    public void conTest() throws Exception{

        byte[] bytes="兩個蝴蝶飛".getBytes("UTF-8");
        ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(bytes);
        //讀入一部分
        ByteArrayInputStream byteArrayInputStream1=new ByteArrayInputStream(bytes,0,bytes.length);
    }

二.一.二 讀取和關閉方法

方法 作用
void close() 關閉一個 ByteArrayInputStream沒有任何效果。
int read​() 從內存中讀一個
int read(byte[] b) 從內存中讀取數據,放置到 b 字節數組裏面
int read​(byte[] b, int off, int len) 從內存中讀取 len個到字節數組

二.二 演示內存輸入流 ByteArrayInputStream

二.二.一 將字符串讀取到內存

   @Test
    public void readTest() throws Exception{

        //定義輸入內存的數據源
        byte[] bytes="你好啊,我是兩個蝴蝶飛".getBytes("UTF-8");

        //寫入到內存裏面了。
        ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(bytes);

        //寫進來了,接下來,該讀出來了。

        //讀出來
        byte[] b=new byte[1024];

        int len=-1;

        while((len=byteArrayInputStream.read(b))!=-1){

            System.out.println("讀出數據:"+new String(b,0,len));
        }
        //關閉
        byteArrayInputStream.close();
    }

運行程序,控制檯打印輸出:

有圖片

二.二.二 將輸入流中的內容讀取到內存裏面

@Test
    public void read2Test() throws Exception{

        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"Hello3.txt");

        InputStream inputStream=new FileInputStream(file);


        byte[] inputB=new byte[1024];

        int len=-1;

        ByteArrayInputStream byteArrayInputStream=null;
        while((len=inputStream.read(inputB))!=-1){

            //寫入到內存裏面了,一次讀取內容放置到 innputB 字節數組裏面了。
             byteArrayInputStream=new ByteArrayInputStream(inputB,0,len);

            //寫進來了,接下來,該讀出來了。

            byte[] b=new byte[1024];

            int lenTemp=-1;

            while((lenTemp=byteArrayInputStream.read(b))!=-1){

                System.out.println("讀出數據:"+new String(b,0,len));
            }

        }

        //關閉
        byteArrayInputStream.close();

        inputStream.close();

    }

運行程序,控制檯打印輸出:

有圖片

謝謝您的觀看,如果喜歡,請關注我,再次感謝 !!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章