InputStream不会重置为开头

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

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

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

当您使用java.io.InputStream对象的markSupported()如果您的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(); 

如果InputStream支持mark(您可以使用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个字节,它可能读得更少。