Base64有许多静态编码方法将 byte[] 返回为
Base64.encodeBase64(stringToEncode.getBytes(StandardCharsets.UTF_8.name()));
还有MessageDigest使用静态 getInstance
进行编码/摘要
但是Hex没有,它只有实例方法 encode这需要创建一个实例
new Hex().encode(stringToEncode.getBytes(StandardCharsets.UTF_8.name()));
我是否需要创建实例来获取字节数组,或者有更好的方法吗?
例如,我目前认为添加 getBytes()
不是一个好主意
Hex.encodeHexString(stringToEncode).getBytes()
最佳答案
没有静态方法可供您使用,但该类是线程安全的,因此您只需创建它的实例并保留它即可。
这是一些常见的习惯用法,例如 ObjectMapper
或格式化对象。当然,它们通常具有比 Hex
需要更多的内部状态,所以这可能是一个设计疏忽。
我相信这些实例方法的原因是构造函数采用 Charset
,这是将字符转换为字节所需的。另一种方法是将其作为静态方法中的参数传递。当然两者都可以实现。
关于java - Apache 通用编解码器 - 为什么 Hex.encode() 不是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58128819/