将OutputStream转换为Okio源

时间:2019-01-23 17:19:00

标签: kotlin inputstream outputstream okio

我正在尝试寻找一种优雅的方法,将OutputStream方法产生的bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)转换为Okio的Source / InputStream(需要进一步处理数据编码),同时保持数据缓冲区。

我尝试使用

val pipe = Pipe(100)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, Okio.buffer(pipe.sink()).outputStream())
        saveFile(File("filename"), pipe.source())

但是它挂在bitmap.compress上。

1 个答案:

答案 0 :(得分:1)

使用缓冲区代替http://square.github.io/okio/1.x/okio/okio/Buffer.html

val buffer = Buffer()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, buffer.outputStream())
saveFile(File("filename"), buffer)

管道将采用并发编写器以避免潜在的阻塞

http://square.github.io/okio/1.x/okio/okio/Pipe.html

  

已连接的源和接收器。接收器的输出是源的输入。通常,每个线程都由自己的线程访问:生产者线程将数据写入接收器,而消费者线程从源线程读取数据。   此类使用缓冲区解耦源和宿。该缓冲区具有用户指定的最大大小。当生产者线程超出其使用者时,缓冲区将填满,最终写入接收器的操作将阻塞,直到使用者被追上。