什么是/是实现此Java“byte[]到Hex”类的Scala方式

2022-09-01 11:20:08

我对Scala(2.8)技术特别感兴趣,这些技术用于构建带有格式的字符串,以及使这种功能在有用的地方易于访问的有趣方法(字节列表,字符串,...?)。

public class Hex {
  public static String valueOf (final byte buf[]) {
    if (null == buf) {
      return null;
    }
    final StringBuilder sb = new StringBuilder(buf.length * 2);
    for (final byte b : buf) {
      sb.append(String.format("%02X", b & 0xff));
    }
    return sb.toString();
  }

  public static String valueOf (final Byteable o) {
    return valueOf(o.toByteArray());
  }
}

这只是一个学习练习(所以Java的效用和实现不是问题。

谢谢


答案 1

这与您的代码处理方式不同。null

object Hex {

  def valueOf(buf: Array[Byte]): String = buf.map("%02X" format _).mkString

  def valueOf(o: Byteable): String = valueOf(o.toByteArray)

}

如果你想能够处理可能的数组,你最好通过调用代码并执行以下操作来做到这一点:null

val bytes: Array[Byte] = // something, possibly null
val string: Option[String] = Option(bytes).map(Hex.valueOf)

答案 2

也许有更优雅的方式,但像这样:

def valueOf(bytes : List[Byte]) = bytes.map{
  b => String.format("%02X", new java.lang.Integer(b & 0xff)) 
}.mkString

应该工作。


推荐