Open Chuckame opened 1 month ago
Could you use UnsafeCursor? https://square.github.io/okio/3.x/okio/okio/okio/-buffer/-unsafe-cursor/index.html
How to wrap the array using unsafe cursor? I only see a transfer method to still write bytes to the buffer.
Maybe by setting the bytes to data
?
You’d use this API to get a ByteArray that you can write bytes into. (That is only useful if the APIs you’re interacting with let you provide the target byte arrays.)
Ah ok, this is already ok for the encoding part.
I'm mainly talking about decoding data from a ByteArray
using BufferedSink
without copying the ByteArray
I would like something like BufferedSink.wrap(bytes)
Context
I'm currently the maintainer of avro4k and I'm planning to use okio for kicking out java streams and hoping a day to be multiplatform.
A lot of apps/libs/frameworks are dealing only with
ByteArray
(I'm not saying it's a good idea though). On our side, in the avro world, and especially in the messaging world (kafka, rabbitmq, ...) everything is using aByteArray
and we have no room for improvement to useByteBuffer
or even okio'sBuffer
.We can encode easily data to a
Buffer
then reading the content to aByteArray
.But for decoding from a
ByteArray
, with okio, we only have to choice to first copy the content to aBuffer
and then decode, that is really bad regarding performances.By the way, we are not using directly
Buffer
butBufferedSink
andBufferedSource
for this really great encoding/decoding API, but sadly those interfaces aresealed
.Proposal
A constructor of
BufferedSource
that takes aByteArray
to allow reading "complex" values (readLongLe, readUtf8, ...) over aByteArray
Non goal
Backing a
Buffer
with aByteArray
: https://github.com/square/okio/issues/1360