什么是实现这个Java“byte 到Hex”类的Scala方式

我特别感兴趣的是Scala(2.8)技术用于构建具有格式的字符串以及有用的方法,以便在有用的情况下轻松访问这些function(字节列表,字符串,……?)。

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的实用程序和实现不是问题。)

谢谢

这不会以与代码相同的方式处理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) 

也许有更优雅的方式,但有类似的东西:

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

应该管用。

您应该使用Scala的Option类型而不是null 。 (这是使用Scala 2.8.0.RC1测试的)

 object Hex { def valueOf (buf: Array[Byte]) = { if (null == buf) { None } else { val sb = new StringBuilder(buf.length * 2) for (b <- buf) { sb.append("%02X".format(b & 0xff)) } Some(sb.toString()) } } /* def valueOf(o: Byteable) = { return valueOf(o.toByteArray()); } */ } println(Hex.valueOf(Array(-3, -2, -1, 0, 1, 2, 3))) println(Hex.valueOf(null))