Hi Rafaello,
On 8/21/20 11:44 AM, Raffaello Giulietti wrote:
Hi Roger,
I'm only a contributor, not an official reviewer. Despite this, I
would like to make some notes about the encoder part.
Reviews are always appreciated, whether Reviewer or not.
(1) Comparing with other APIs that accept a range of a byte[], my
understanding is that encode(byte[], int, int) should throw IOOE when
index < 0 or too big, even if length == 0. Since other parts of the
code already invokes Objects.checkFromIndexSize() in other methods, it
would be more consistent to add this check to this one as well.
yes, will add that, both the encode methods should have the same range
checks.
(2) The code on L.334 throws an exception when encodeOptDelim() is
invoked with an empty byte[]. This can happen precisely because the
checks mentioned in (1) are not strict enough. E.g., given an
appropriate encoder, encode(new byte[0], 0, 1) will invoke
encodeOptDelim() and throw on L.334
Right, adding the check to 1 will keep it from getting that far.
(3) I guess "NYI" on L.343 stands for "not yet implemented", but
shouldn't this more likely be an AssertionError? What else needs to be
implemented here?
Good point, I'll refactor it to avoid duplicate checks before calling
the private function and in the function.
(4) The private toHex(int, boolean) can be declared static.
ok
(5) To maintain consistency with the other ranges, on L.599
"0123456789" could be replaced by "0-9".
ok
(6) As already noted by Tagir, there's a duplication of checks in
L.290-291
fixed.
I'll let some of the higher level API questions settle before updating
the webrev.
Thanks, Roger
Greetings
Raffaello
Please review a java.util.Hex API to encode and decode hexadecimal
strings to and from byte arrays.
Within the JDK and JDK tests there are multiple implementations to
encode and decode
hexadecimal strings to byte arrays. Hex encoders and decoders support
upper or lower case hexadecimal characters, delimiters, prefix, and
suffix.
The API is modeled after the java.util.Base64 API providing static
factories,
immutable threadsafe instances with methods to encode to and decode from
string and StringBuilder.