什么是实现这个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))