InputStream不会重置为开头

时间:2011-07-16 10:30:32

标签: java parsing inputstream

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

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

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

2 个答案:

答案 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个字节,它可能会读得更少。