如何从流中特定位置的输入流开始读取字节?

时间:2013-04-02 11:49:17

标签: java

我在java中使用URL类,我希望通过输入流从流中的特定字节位置读取字节,而不是使用skip()函数,这需要花费大量时间才能到达该特定位置。

3 个答案:

答案 0 :(得分:0)

流的本质意味着您需要读取所有数据才能到达您想要开始的特定位置。不幸的是,你不会比skip()更快。

答案 1 :(得分:0)

我认为这是不可能的,这就是原因:当您发送GET请求时,远程服务器不知道您对从100到200的字节感兴趣 - 他向您发送完整的文档/文件。所以你需要阅读它们,但不需要处理它们 - 这就是为什么跳过很慢的原因 但是:我确信您可以告诉服务器(其中一些支持它,一些 - 不支持)您想要100多个字节的文件。
另外:请参阅此内容以深入了解跳过机制:How does the skip() method in InputStream work?

答案 2 :(得分:0)

简单的答案是你做不到。

如果您执行请求整个文件的GET,则必须使用skip()来访问您想要的部分。 (事实上​​,缓慢很可能是因为服务器必须将所有正在跳过的数据发送到客户端。这就是TCP / IP的工作方式......)

然而,有一种可能的选择。 HTTP 1.1规范支持使用Range header部分提取文档。如果您的服务器支持此功能,那么您可以请求服务器仅向您发送您感兴趣的文档范围。但是,您可能需要处理服务器忽略Range标头并始终发送整个文档的情况。