输入流不会重置为开始

2022-09-02 21:09:50
InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.read(preview, 0, 100);

现在我想稍后引用 InputStream,但我希望它从流的开头开始,而不是 100 字节。我在100处尝试了它,然后在我阅读了前100个字节之后,但这也不起作用。mark()reset()

有什么想法吗?可能是一个愚蠢的错误..只是没有看到它。


答案 1

当您使用java.io.InputStream对象时,您应该使用该方法检查您的InputStream是否确实支持使用mark。根据API,该类没有,但java.io.BufferedInputStream类可以。也许你应该将流嵌入到一个对象中,比如:mark()markSupported()InputStreamBufferedInputStream

InputStream data = new BufferedInputStream(realResponse.getEntity().getContent());
// data.markSupported() should return "true" now
data.mark(some_size);
// work with "data" now
...
data.reset();

答案 2

如果支撑标记(您可以使用该方法进行检查),则以下操作应该有效:InputStreammarkSupported()

InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.mark(100);
data.read(preview, 0, 100);
data.reset();

但是,请注意,不能保证一次读取100个字节,它可能会读取更少。data.read(preview, 0, 100)


推荐