【问题标题】:Convert OutputStream to Okio Source将 OutputStream 转换为 Okio 源
【发布时间】:2019-06-17 08:27:05
【问题描述】:

我正在尝试找到一种优雅的方式将bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream) 方法产生的OutputStream 转换为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

【问题讨论】:

    标签: kotlin inputstream outputstream okio


    【解决方案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)
    

    Pipe 将假定一个并发写入器以避免潜在的阻塞

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

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

    【讨论】:

    • 然后我需要InputStreamjavax.crypto.CipherInputStream。我使用saveFile(Okio.source(buffer.inputStream())) 成功获得了它。我希望这是一个正确的方法。
    猜你喜欢
    • 2015-01-13
    • 2020-11-27
    • 2018-07-19
    • 2020-09-28
    • 1970-01-01
    • 2010-09-18
    • 2010-09-08
    • 2010-10-08
    相关资源
    最近更新 更多