我試圖從文件中讀取第一個8192
字節,並通過返回布爾值的方法來運行這些字節。如何使用輸入流標記和復位功能?
該布爾值告訴我該文件是否屬於特定類型。
如果該方法在文件類型爲I的字節上返回true,則希望獲取剩餘的字節並通過其他方法運行它們。如果爲false,則通過其他方法運行剩餘的字節。
我試圖使用標記,但沒有成功。
private final void handleFile(InputStream inputStream) {
BufferedInputStream bis = new BufferedInputStream(inputStream);
bis.mark(8192);
byte[] startingBytes = inputStreamToByteArray(bis);
if(startingBytes.length == 0) { return; }
byte[] finalBytes;
if(isFileType(startingBytes)) {
bis.reset();
finalBytes = inputStreamToByteArray(bis);
methodForFinalBytes(finalBytes);
} else {
// Do other stuff;
}
}
private byte[] inputStreamToByteArray(InputStream inputStream) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
try {
while(inputStream.read(buffer) != -1) {
baos.write(buffer);
}
} catch(IOException ioe) {
ioe.printStackTrace();
}
return baos.toByteArray();
}
問題是在我離開的地方撿起,同時還將字節數組保存爲塊(用於處理大文件)。此外,我只得到8192
字節返回,而不是剩餘的。
有什麼建議嗎?
'的InputStream#標記(INT)':_Marks在當前位置這個輸入流。隨後對reset方法的調用將重新定位該流的最後標記位置,以便後續讀取重新讀取相同的字節。你只是回想一下'inputStreamToByteArray',它讀取8192個字節。 –