InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.read(preview, 0, 100);
//现在我想稍后引用InputStream,但我希望它从流的开头,而不是100字节。我在100 {I}尝试mark()
,然后reset()
在我读取前100个字节之后,但这也不起作用。
有什么想法吗?可能是一个愚蠢的错误......只是没有看到它。
答案 0 :(得分:20)
当您使用java.io.InputStream对象的mark()
时,如果您的InputStream实际上支持使用mark,则应使用markSupported()
方法进行检查。根据API,InputStream
类不会,但java.io.BufferedInputStream类会这样做。也许你应该将你的流嵌入BufferedInputStream
对象中,如:
InputStream data = new BufferedInputStream(realResponse.getEntity().getContent());
// data.markSupported() should return "true" now
data.mark(some_size);
// work with "data" now
...
data.reset();
答案 1 :(得分:1)
如果InputStream
支持标记(您可以使用markSupported()
方法检查),则以下内容应该有效:
InputStream data = realResponse.getEntity().getContent();
byte[] preview = new byte[100];
data.mark(100);
data.read(preview, 0, 100);
data.reset();
但是,请注意data.read(preview, 0, 100)
不保证一次读取100个字节,它可能会读得更少。