[Java] Make AsciiEncoding throw exceptions similar to JDK parseInt/parseLong #214
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.
Empty string results in NumberFormatException. Attempt to read outside string boundaries (or negative length) in IndexOutOfBoundsException.
This behaviour is consistent with Integer::parseInt / Long::parseLong, and makes a slightly more usable API which does not force callers to catch 2 exceptions for the same kind of error - non-numeric input value. Incorrect usage still results in IndexOutOfBoundsException.
As I understand this is performance-sensitive call, I've run some benchmarks to parse 1 million numbers and try to evaluate effect of the special-case for
length <=1
On my machine first case actually shows slight improvement (~15%) - which I don't quite understand. The other 3 produce pretty consistent results on both original and updated code.
Benchmarks are not included in this PR, but are available from https://github.com/AndreyNudko/agrona/tree/ascii-encoding-benchmarks/agrona-benchmarks/src/main/java/org/agrona