【发布时间】:2013-04-02 11:49:16
【问题描述】:
我在 java 中使用 URL 类,我想通过输入流从流中的特定字节位置读取字节,而不是使用需要大量时间才能到达该特定位置的 skip() 函数。
【问题讨论】:
标签: java
我在 java 中使用 URL 类,我想通过输入流从流中的特定字节位置读取字节,而不是使用需要大量时间才能到达该特定位置的 skip() 函数。
【问题讨论】:
标签: java
我想这是不可能的,原因如下:当您发送 GET 请求时,远程服务器不知道您对从 100 到 200 的字节感兴趣 - 他向您发送完整的文档/文件。所以你需要阅读它们,但不需要处理它们——这就是为什么跳过很慢。
但是:我相信您可以告诉服务器(有些支持,有些不支持)您想要 100 多个字节的文件。
另外:请参阅此内容以深入了解跳跃机制:How does the skip() method in InputStream work?
【讨论】:
流的性质意味着您需要通读所有数据才能到达要开始的特定位置。不幸的是,你不会比skip() 更快。
【讨论】:
简单的答案是你不能。
如果您执行请求整个文件的 GET,则必须使用 skip() 来获取您想要的部分。 (事实上,速度很慢很可能是因为服务器必须将所有被跳过的数据发送给客户端。这就是 TCP/IP 的工作原理......)
但是,有一个可能的替代方案。 HTTP 1.1 规范支持使用Range header 获取部分文档。如果您的服务器支持这一点,那么您可以请求服务器仅向您发送您感兴趣的文档范围。但是,您可能需要处理服务器忽略 Range 标头并发送整个文档的情况.
【讨论】: