有時候我們需要對同乙個inputstream物件使用多次。
但第一次讀取inputstream物件後,第二次再讀取時可能已經到stream的結尾了(eofexception)或者stream已經close掉了。
而inputstream物件本身不能複製,因為它沒有實現cloneable介面。此時,可以先把inputstream轉化成bytearrayoutputstream,後面要使用inputstream物件時,再從bytearrayoutputstream轉化回來就好了。**實現如下:
// 從request中獲取流,取出來的流只能使用一次
inputstream inputstream = request.getinputstream();
bytearrayoutputstream baosoutputstream = new bytearrayoutputstream();
byte buffer = new
byte
[1024];
intlen;
while ((len = inputstream.read(buffer)) >-1)
baosoutputstream.flush();
inputstream stream1 = new bytearrayinputstream(baosoutputstream.tobytearray());
inputstream stream2 = new bytearrayinputstream(baosoutputstream.tobytearray());
//一定要記得關閉資源,先開後關
stream2.close();
stream2 = null;
stream1.close();
stream1 = null;
baosoutputstream.close();
baosoutputstream = null;
inputstream.close();
inputstream = null;
關於用Getline讀取檔案只能讀取首行的問題
自己再 中用getline讀取檔案時只能讀取首行,這個問題困擾了我很久,最開始我以為是函式沒有識別換行,任然再第一行讀取東西,但這個行getline這個函式的基本功能就相悖了,在稍作測試後我就換了其他思路,轉向其他方向。void readman list m,char filename int ar...
檔案流讀取 InputStream
bufferedreader轉換成string 注意 流關閉需要自行處理 param reader return string throws ioexception public static string bufferedreader2string bufferedreader reader th...
ubuntu系統U盤只能讀取不能寫入
ubuntu系統下,u盤只能讀取無法寫入,產生這個問題的原因是u盤的檔案系統損壞,作業系統為了防止進一步毀壞檔案系統,而將其設定成了唯讀。解決方法一 失敗 df h umount media zhx b025 73fe sudo fsck c a dev sdc 或 sudo dosfsck v a...