場景描述:我們需要對同乙個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...