Use toByteBuffer in ByteChunkAbsorbable to avoid allocating an array #376
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The latest version of fs2 has an efficient
toByteBuffer
method, which maybe be executed in O(1) time and space if the subtype ofChunk
happens to be the correct one. If it's the wrong subtype, it fallbacks to the sametoArray
method the currentjawn-fs2
code uses.This should result in reduced CPU usage and lower memory usage as we're no longer allocating a whole new byte array and not copying over the data.
Note jawn AsyncParser already has a
absorb(b: ByteBuffer)
so nothing needs to change on that end.https://github.com/typelevel/fs2/blob/1f5f2310456b18fb1e5f23e31b24ff387797d3eb/core/shared/src/main/scala/fs2/Chunk.scala#L305-L319
Note this should synergise with typelevel/fs2#2990.