Apache通用编解码器-为什么Hex.encode()不是静态的?

时间:2019-09-27 06:18:42

标签: java hex apache-commons-codec

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()

1 个答案:

答案 0 :(得分:1)

没有可供您使用的静态方法,但是该类是线程安全的,因此您可以创建它的一个实例并保留它。

这是常见的习惯用法,例如ObjectMapper之类的类或格式化对象。当然,它们通常具有超出Hex需求的内部状态,所以也许这是设计疏忽。

我相信这些是实例方法的原因是构造函数采用Charset,这是将char转换为字节所必需的。另一种选择是将其作为静态方法中的参数传递。两者都可以实现。