Преобразование OutputStream в источник Okio

Я пытаюсь найти элегантный способ преобразовать OutputStream, созданный методом bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream), в Source/InputStream Okio (необходимый для дальнейшего манипулирования данными - кодирование) при сохранении буфера данных.

я пытался использовать

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

но это зависает на bitmap.compress.


person Bresiu    schedule 23.01.2019    source источник


Ответы (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

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

person Yuri Schimke    schedule 23.01.2019
comment
Мне нужно тогда InputStream для javax.crypto.CipherInputStream. Я успешно получил это, используя saveFile(Okio.source(buffer.inputStream())). Я надеюсь, что это правильный способ сделать это. - person Bresiu; 23.01.2019