Skip to content

Return short reads from ByteFlow.runToInputStream - #364

Merged
adamw merged 3 commits into
mainfrom
fix/input-stream-short-reads
Sep 14, 2026
Merged

Return short reads from ByteFlow.runToInputStream#364
adamw merged 3 commits into
mainfrom
fix/input-stream-short-reads

Conversation

@adamw

@adamw adamw commented Sep 11, 2026

Copy link
Copy Markdown
Member

The InputStream returned by ByteFlow.runToInputStream filled the whole buffer on bulk reads, blocking for further chunks until the buffer was full or the stream ended. Consumers that read in large blocks (e.g. Jackson, 8 KB) stalled on live sources.

Bulk reads now block only until at least one byte is available, copy what is already buffered from the current chunk, and return the count. End of stream still returns -1.

Closes #354

Bulk read(byte[], off, len) blocked until the buffer was full or the
stream ended, so consumers reading large buffers stalled on live sources.
It now blocks only for the first byte and returns what is buffered.

Closes #354
Rename the non-blocking helper, trim comments and javadoc, and restore
the bulk-read assertions in handleEmptyChunksInStream so it fails on
the old behaviour.
@adamw
adamw merged commit 9c63046 into main Sep 14, 2026
8 checks passed
@adamw
adamw deleted the fix/input-stream-short-reads branch September 14, 2026 07:29
adamw added a commit to softwaremill/ox that referenced this pull request Sep 14, 2026
Port of jox [#364](softwaremill/jox#364).

The `InputStream` from `runToInputStream` filled the whole buffer on
bulk reads, blocking for further chunks until the buffer was full or the
stream ended. Consumers reading in large blocks (e.g. JSON parsers)
stalled on live sources.

Bulk reads now block only until at least one byte is available, copy
what is buffered from the current chunk, and return the count. End of
stream still returns -1. Two existing tests changed to expect one chunk
per read.

Merge order: this PR first, then #506, then #507.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01QKfjf299iNreqRt32n2p5D
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ByteFlow.runToInputStream bulk reads wait until the requested length or EOF

1 participant