RFR: 8251989: Hex formatting and parsing utility [v5]

Daniel Fuchs dfuchs at openjdk.java.net
Mon Oct 19 16:55:28 UTC 2020


On Fri, 16 Oct 2020 19:56:30 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> java.util.HexFormat utility:
>> 
>>  - Format and parse hexadecimal strings, with parameters for delimiter, prefix, suffix and upper/lowercase
>>  - Static factories and builder methods to create HexFormat copies with modified parameters.
>>  - Consistent naming of methods for conversion of byte arrays to formatted strings and back: formatHex and parseHex
>>  - Consistent naming of methods for conversion of primitive types: toHexDigits... and fromHexDigits...
>>  - Prefix and suffixes now apply to each formatted value, not the string as a whole
>>  - Using java.util.Appendable as a target for buffered conversions so output to Writers and PrintStreams
>>    like System.out are supported in addition to StringBuilder. (IOExceptions are converted to unchecked exceptions)
>>  - Immutable and thread safe, a "value-based" class
>> 
>> See the [HexFormat
>> javadoc](http://cr.openjdk.java.net/~rriggs/8251989-hex-formatter/java.base/java/util/HexFormat.html) for details.
>> Review comments and suggestions welcome.
>
> Roger Riggs has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev
> excludes the unrelated changes brought in by the merge/rebase. The pull request contains 10 additional commits since
> the last revision:
>  - Merge branch 'master' into 8251989-hex-formatter
>  - Test enhancements from Chris Hegarty
>  - Expanded test coverage and fixed related bugs; Added static imports for TestNG; Corrected declaration of return type of
>    tohexDigits(Appendable...)
>  - Merge branch 'master' into 8251989-hex-formatter
>  - Cleanup of javadoc markup
>  - Added assertions to testVariableLength and samples
>  - Merge branch 'master' into 8251989-hex-formatter
>  - temp updates
>  - Various code review comments, rename UpperCase and LowerCase methods to match Character, remove unnecessary Class name
>    qualifications, etc.
>  - 8251989: Hex formatting and parsing utility

Changes requested by dfuchs (Reviewer).

src/java.base/share/classes/java/util/HexFormat.java line 332:

> 330:         if (s == null) {
> 331:             StringBuilder sb = new StringBuilder(length *
> 332:                     (delimiter.length() + prefix.length() + suffix.length()) - delimiter.length());

should that be:
length * (delimiter.length() + prefix.length() + suffix.length() + 2) - delimiter.length());
It seems to me that otherwise, if you have no delimiter, no prefix, and no suffix, then your computed size will be 0,
which seems wrong.

src/java.base/share/classes/java/util/HexFormat.java line 569:

> 567:         }
> 568:         for (int i = 0; i < literal.length(); i++) {
> 569:             if (string.charAt(index + i) != literal.charAt(i)) {

There should probably be a check to verify that `string` contains at least `index + literal.length()` characters.
Otherwise AIOBE might be thrown by `string.charAt(index + i)` ?

-------------

PR: https://git.openjdk.java.net/jdk/pull/482


More information about the core-libs-dev mailing list