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

How to implement seek() function in BufferedSink (or BufferedSource) in OKHttp?

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

我们都知道在Java中,RandomAccessFileclass有一个方法seek(long),可以让我们从特定位置开始reading/writing一个文件,并且该位置之前的字节将被丢弃。 OKHttp中有没有类似的方法?

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

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

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

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

 BufferedSource img = Okio.buffer(Okio.source(getAssets().open("image.jpg")));

 byte[] image = img.readByteArray();

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

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

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