1

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

4

3 回答 3

0

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

于 2013-04-02T11:52:54.513 回答
0

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

于 2013-04-02T11:53:07.393 回答
0

简单的答案是你不能。

如果您执行请求整个文件的 GET,则必须使用它skip()来获取所需的部分。(事实上​​,速度很慢很可能是因为服务器必须将所有被跳过的数据发送给客户端。这就是 TCP/IP 的工作原理......)

但是,有一个可能的替代方案。HTTP 1.1 规范支持使用Rangeheader部分获取文档。如果您的服务器支持这一点,那么您可以请求服务器仅向您发送您感兴趣的文档范围。但是,您可能需要处理服务器忽略 Range 标头并发送整个文档的情况.

于 2013-04-02T12:08:30.847 回答