close

常常我們需要從InputStream這些串流(stream)裡面讀取位元陣列,這時候常常想到的方法都是
InputStream.read()這方法
不過這個方法只能一次讀1一個byte有損效率
所以通常都會使用個緩衝區(buffer)來一次存取多個位元資料
InputStream.read(buffer)
但是這時候又會遇到檔案已經到尾了可是還不夠buffer大小,因此常常最後一次讀會添加不必要的資料結果出錯
因此在讀取的時候要把InputStream.read(buffer) 回傳的int值記錄下來,那個數值是代表你讀取了多少長度的資料
這樣你就只要讀取buffer裡面的0~length的數值就好
以上是題外話

下面才是正題,當我們讀進bytes 該放到哪裡好呢,其實有很多種方法以下是其中一種方法! 參考看看吧!

 

    InputStream is = new FileInputStream("test");
    //暫存BYTE陣列
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    //緩衝
    byte buffer[] = new byte[512];
    //紀錄讀進來長度
    int length = 0;
    //假如等於-1代表沒有資料了
    while( (length = is.read(buffer)) != -1){
            //從緩衝區讀取buffer裡面0~length-1的位置
            baos.write(buffer, 0, length);
    }
    //ByteArrayOutputStream轉成位元陣列
    byte data [] = baos.toByteArray();
    is.close();
    baos.close();

上面的data就是test檔裡面的所有資料嚕,希望對大家有幫助!

arrow
arrow
    全站熱搜

    eric1300460 發表在 痞客邦 留言(2) 人氣()