【问题标题】:How do i start reading byte through input stream from a specific Location in the stream?如何从流中的特定位置开始通过输入流读取字节?
【发布时间】:2013-04-02 11:49:16
【问题描述】:

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

    【讨论】:

    • 我假设如果我可以给出偏移量并从该地址获取字节,但从答案中我认为跳过是到达所需字节位置的唯一方法
    • @Datta - 这不是唯一的解决方案。再读一遍我的答案。
    【解决方案2】:

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

    【讨论】:

    • 谢谢你的即时回答我假设我可以给它一个偏移量并从该地址获取字节,但我认为我被跳过了
    【解决方案3】:

    简单的答案是你不能。

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

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

    【讨论】:

    • Thnx 对于即时答案,我认为除了使用 skip 我别无他法我假设如果我可以给出偏移量并从流中的该地址获取字节。
    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2012-10-29
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多