Преобразование OutputStream в источник Okio - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь найти элегантный способ преобразования OutputStream, созданного методом bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream), в 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 голосов
/ 23 января 2019

Используйте буфер вместо 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

Источник и раковина, которые прилагаются. Выход приемника является входом источника. Обычно доступ к каждому из них осуществляется собственным потоком: поток-производитель записывает данные в приемник, а поток-потребитель считывает данные из источника. Этот класс использует буфер для разделения источника и приемника. Этот буфер имеет указанный пользователем максимальный размер. Когда поток производителя обгоняет своего потребителя, буфер заполняется и в конечном итоге запись в приемник будет блокироваться, пока потребитель не догонит.

...