InputStream流的二次讀取

2021-07-24 23:00:42 字數 1346 閱讀 6099

場景描述:我們需要對同乙個inputstream物件使用多次。比如,客戶端從伺服器獲取資料 ,利用httpurlconnection的getinputstream()方法獲得stream物件,需要將inputstream流讀取獲取相關引數(第一次讀取),又想把inputstream流中的資料寫進檔案快取到本地(第二次讀取)。

問題描述:第一次讀取inputstream物件後,第二次再讀取時可能已經到stream的結尾了(eofexception)或者stream已經close掉了,所有獲取到的資料為null或者說沒有獲取到資料。

解決方法:因為inputstream物件本身不能複製(inputstream沒有實現cloneable介面),所以先把inputstream轉化成bytearrayoutputstream,後面要使用inputstream物件時,再從bytearrayoutputstream轉化回來就好了。

//獲取客戶端inputstream物件

inputstream input= requset.getinputstream();

//將inputstream物件轉換成bytearrayoutputstream

bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream();

byte buffer = new

byte[1024];

int len;

while ((len = input.read(buffer)) > -1 )

bytearrayoutputstream.flush();

//將bytearrayoutputstream可轉換成多個inputstream物件,達到多次讀取inputstream效果

inputstream inputstreama = new bytearrayinputstream(bytearrayoutputstream.tobytearray());

inputstream inputstreamb = new bytearrayinputstream(bytearrayoutputstream.tobytearray());

//將inputstream轉換成字串

bufferedreader br = new bufferedreader(new inputstreamreader(inputstreamb,"utf-8"));

string line = null;

stringbuilder sb = new stringbuilder();

while ((line = br.readline()) != null)

二次的感想

看了第一篇部落格 周見智寫的 我覺得我們有一點像,因為我也是乙個偏科生但是我的成績沒有他當初的時候好,最大的區別是現在我還什麼都不會。還有就是我也是乙個在學計算機前很少接觸計算機的,特別是關於專業知識的,我更是知之甚少剛開始上課連最基本的操作都不熟練,都是一邊做一邊問,不過欣慰的是每次的作業也都完成...

tipask二次開發總結 tipask二次開發總結

條件模板 statement1 statement2 statement3 不帶下標變數的陣列迴圈 statement php的迴圈輸入 foreach array as value statement foreach array as key value 可以引用介面替換變數,其中必須為大寫字母,...

bitmap的二次取樣

bitmap二次取樣 一 二次取樣 一 意義或目的 1 用bitmapfactory解碼一張時,有時會遇到該錯誤。這往往是由於過大造成的。要想正常使用,則需要分配更少的記憶體空間來儲存。bitmapfactory.decodefile imagefile 2 bitmapfactory.option...