InputStream只能讀取一次的解決方法

2021-08-13 19:14:30 字數 1028 閱讀 1996

有時候我們需要對同乙個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...