【问题标题】:How to implement seek() function in BufferedSink (or BufferedSource) in OKHttp?OKHttp的BufferedSink(或BufferedSource)中如何实现seek()函数?
【发布时间】:2021-05-17 18:30:33
【问题描述】:

OKHttp中的BufferSink(或BufferedSource)如何实现seek()函数?

我们都知道,在Java中,RandomAccessFile类有一个方法seek(long),可以让我们从特定位置开始读/写文件,该位置之前的字节会被丢弃。 OKHttp中是否有类似的方法?

我注意到BufferedSink中有一个方法:

write(byteString: ByteString, offset: Int, byteCount: Int)

可惜参数“offset”只接受int类型,不接受long类型,在传输大文件时有一定的限制。

【问题讨论】:

  • 如果没有服务器端的额外支持,HTTP 流不会是随机访问的。当您试图寻找过去的两个演出时,您可能需要考虑替代协议,例如 RTMP 或其他协议。

标签: java android okhttp okio


【解决方案1】:

您要查找的 API 是 BufferedSource.skip()

在 Okio 3.0(即将推出)中,我们添加了一个新的 Cursor 类,如果基础源是 File,它将使 skip() 更快。

https://github.com/square/okio/issues/889

【讨论】:

    【解决方案2】:

    我正在使用 Okio.buffer 从 assets 文件夹中读取图像文件,如下所示:

     BufferedSource img = Okio.buffer(Okio.source(getAssets().open("image.jpg")));
    
     byte[] image = img.readByteArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2017-08-18
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2017-05-01
      相关资源
      最近更新 更多