【发布时间】:2013-07-25 14:14:44
【问题描述】:
我正在尝试从文件中读取第一个 8192 字节并通过返回布尔值的方法运行这些字节。
该布尔值告诉我文件是否属于特定类型。
如果该方法在文件类型的字节上返回 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#mark(int): 标记此输入流中的当前位置。对 reset 方法的后续调用会将此流重新定位到最后标记的位置,以便后续读取重新读取相同的字节。。您只是在回忆inputStreamToByteArray,它读取 8192 个字节。
标签: java inputstream reset bytearrayoutputstream