Re: 回复:Adding appendHex method to StringBuilder
Roger Riggs
roger.riggs at oracle.com
Mon Oct 9 19:45:47 UTC 2023
Hi,
The j.u.HexFormat class has methods that append hex formatted byte
arrays to an Appendable such as StringBuilder.
The `toHexDigits` methods return strings with the hex values of byte,
short, char, int, and long.
Similar `formatHex` methods could be added with an Appendable argument
would keep the focus in HexFormat for the formatting but allows the
result to be placed directly in a StringBuilder.
For example in this draft PR. https://github.com/openjdk/jdk/pull/16105
Regards, Roger
On 10/2/23 10:01 AM, 温绍锦(高铁) wrote:
> StringTemplate is great and I wish I can submit PR to improve it. But
> I still think StringBuilder.appendHex is a basic API, not a formatted
> API. Just like Integer.toHexString and Long.toHexString, they are very
> commonly used and should be built-in.
>
> ------------------------------------------------------------------
> 发件人:温绍锦(高铁) <shaojin.wensj at alibaba-inc.com>
> 发送时间:2023年10月2日(星期一) 20:46
> 收件人:Mark Reinhold <mark.reinhold at oracle.com>; Claes Redestad
> <claes.redestad at oracle.com>
> 抄 送:core-libs-dev at openjdk.org <core-libs-dev at openjdk.org>
> 主 题:回复:Adding appendHex method to StringBuilder
>
> Using String Template FMT has better performance and better code
> readability. But String Template does not yet support
> for/while/if/switch. Is there any plan to enhance String Template
> to support for/while/if/switch? The following scenarios cannot be
> implemented using String.format or String Template. I think
> whether to build in support for foo(bar(x)) depends on whether it
> is a common enough method.
>
> ```java
> package java.net;
> class Inet6Address extends InetAddress {
> static String numericToTextFormat(byte[] src) {
> StringBuilder sb = new StringBuilder(39);
> for (int i = 0; i < (INADDRSZ / INT16SZ); i++) {
> sb.append(Integer.toHexString(((src[i<<1]<<8) & 0xff00)
> | (src[(i<<1)+1] & 0xff)));
> if (i < (INADDRSZ / INT16SZ) -1 ) {
> sb.append(":");
> }
> }
> return sb.toString();
> }
> }
> class SocketPermission {
> private boolean authorizedIPv6(String cname, byte[] addr) {
> String authHost = "";
> InetAddress auth;
> try {
> StringBuilder sb = new StringBuilder(39);
> for (int i = 15; i >= 0; i--) {
> sb.append(Integer.toHexString(((addr[i]) & 0x0f)));
> sb.append('.');
> sb.append(Integer.toHexString(((addr[i] >> 4) & 0x0f)));
> sb.append('.');
> }
> ...
> }
> }
> ```
> ```java
> package sun.security.krb5.internal.crypto.dk;
> class DkCrypto {
> static String bytesToString(byte[] digest) {
> // Get character representation of digest
> StringBuilder digestString = new StringBuilder();
> for (int i = 0; i < digest.length; i++) {
> if ((digest[i] & 0x000000ff) < 0x10) {
> digestString.append('0').append(Integer.toHexString(digest[i] &
> 0x000000ff));
> } else {
> digestString.append(
> Integer.toHexString(digest[i] & 0x000000ff));
> }
> }
> return digestString.toString();
> }
> }
> ```
>
> - wenshao
>
> ------------------------------------------------------------------
> 发件人:Mark Reinhold <mark.reinhold at oracle.com>
> 发送时间:2023年10月2日(星期一) 20:19
> 收件人:Claes Redestad <claes.redestad at oracle.com>
> 抄 送:温绍锦(高铁) <shaojin.wensj at alibaba-inc.com>;
> core-libs-dev at openjdk.org <core-libs-dev at openjdk.org>
> 主 题:Re: Adding appendHex method to StringBuilder
>
> 2023/10/2 7:22:55 -0400, claes.redestad at oracle.com:
> > I think this goes against the grain: StringBuilder is a simple
> builder
> > for non-localized unformatted output. For formatted output there’s
> > Formatter, String.format and, with JEP 430[1], FMT."..." to help
> output
> > string data in more advanced, formatted and localized ways.
>
> Agreed.
>
> If we were to introduce a `fooBar(x)` method for every common
> `foo(bar(x))` expression in the JDK code base then our APIs
> would fast become inscrutable.
>
> - Mark
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20231009/e55cf8f4/attachment-0001.htm>
More information about the core-libs-dev
mailing list