Hi Vinnie,
On the API and spec, a few comments:
- Expanding the printable string from ASCII to ISO-8859-1 would make
it a bit more useful in more cases.
That might suggest using the Charset converter to do the work (less
optimized but more functional).
- There is no API support for ByteBuffers, another common source of
bytes, that would make a good addition
for completeness. John Rose suggested a ByteSequence interface in
the context of file processing but
that hasn't settled down.
- The class name "Hex" might be a bit more evocative as HexDump or
HexConverter.
- Method names; the "Hex" in method names might be
unnecessary/redundant since, as static methods,
they would frequently appear in code as "Hex.fromHexString" and a
simple "Hex.fromString" would be fine.
Ditto, toHexString(bytes) -> toString(bytes)...
- There are not many forms that allow the formatter to be supplied, for
example, dump(in, out) might be
a case where a formatter would be desired.
- Hex.Formatter interface could have a default method that provides the
default formatting or as
a static method so it can be used with a method reference.
- On the example in the class javadoc, I would use the implementation of
the default formatter with both hex and ascii
to show how that works.
- As Max observes, being able to supply the delimiters might be a good
addition. (I'm thinking IP addresses too).
It looks quite good and very useful.
Thanks, Roger
On 5/8/2018 10:34 PM, Weijun Wang wrote:
Nice tool.
However, I am not sure how toFormattedHexString() and toPrintableString() are
useful, seems only for providing a customizable dump format which is, actually,
not very customizable.
For me, toHexString and fromHexString are of course the most useful methods. As
for dump, I can only think of
1. The existing sun.security.HexDumpEncoder format, when I want to dump a lot
of bytes as a block
2. "00:11:22:33:AA:BB:CC" which fits in one line and also easy to read, when I
want inline debugging output
If the customizable dump method is both powerful and simple enough to create 2) above, I'll be
happy. Otherwise, I can live with toHexString().replaceAll("(..)(?=.)", "$1:").
Thanks
Max
On May 4, 2018, at 4:22 AM, Vincent Ryan <[email protected]> wrote:
Hello,
Please review this proposal for a new API to conveniently generate and display
binary data using hex string representation.
It supports both bulk and stream operations and it can also generate the
well-known hexdump format [1].
Thanks
Bug: https://bugs.openjdk.java.net/browse/JDK-8170769
API:
http://cr.openjdk.java.net/~vinnie/8170769/javadoc.05/api/java.base/java/util/Hex.html
Webrev: http://cr.openjdk.java.net/~vinnie/8170769/webrev.05/
____
[1] https://docs.oracle.com/cd/E86824_01/html/E54763/hexdump-1.html