On Fri, 16 Oct 2020 19:56:30 GMT, Roger Riggs <[email protected]> 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
