gpt4 book ai didi

java - 如何使用输入流标记和重置功能?

转载 作者:行者123 更新时间:2023-11-30 11:30:17 24 4
gpt4 key购买 nike

我正在尝试从文件中读取前 8192 字节并通过返回 boolean 值的方法运行这些字节。

该 boolean 值告诉我文件是否属于特定类型。

如果该方法在文件类型的字节上返回 true,那么我想获取剩余的字节并通过不同的方法运行它们。如果为假,则通过不同的方法运行剩余的字节。

我正在尝试使用 mark,但没有成功。

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();
}

问题是从我离开的地方开始,同时还以 block 的形式保存字节数组(用于处理大文件)。此外,我只返回了 8192 字节,而不是剩余字节。

有什么建议吗?

最佳答案

首先,看起来 inputSTreamToByteArray() 正在读取整个流直到文件结尾,而不仅仅是前 8192 个字节。您可能想先单独读取前 8192 个字节。

其次,是否要再次重新读取那些字节?如果没有,我不确定您是否需要标记/重置。 (特别是因为你还有字节数组)

下面的代码首先读取前 8192 个字节,然后决定要做什么:

byte[] header = new byte[8192];
//reads entire array or until EOF whichever is first
bis.read(header);

if(isFileType(header)) {
byte[] finalBytes = inputStreamToByteArray(bis);
methodForFinalBytes(finalBytes);
} else {
// Do other stuff;
}

关于java - 如何使用输入流标记和重置功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com