我无法将索引的字节序列转换为以utf-8编码的字符串。
scala> val x : IndexedSeq[Byte] = IndexedSeq(64.toByte, 64.toByte, 64.toByte)
scala> x.mkString
res2: String = 748464
现在我可以通过转换为数组,然后像这样构建一个新的String来使它工作;
scala> new String(x.toArray)
res3: String = JT@
但两次分配和复制似乎有点矫枉过正。
有更好的方法吗?
答案 0 :(得分:2)
您想要使用指定Charset的构造函数。
但即使从StringBuilder,你也无法避免复制到String的基础值。
另一个想法可能是反序列化,但你仍然需要缓冲和额外的处理来按摩字节。
为了好玩:
scala> val x : IndexedSeq[Byte] = IndexedSeq(65.toByte, 65.toByte, 65.toByte)
x: IndexedSeq[Byte] = Vector(65, 65, 65)
scala> import collection.generic.CanBuildFrom
import collection.generic.CanBuildFrom
scala> val cbf = new CanBuildFrom[IndexedSeq[Byte], Char, String] {
| def apply(from: IndexedSeq[Byte]) = apply()
| def apply() = StringBuilder.newBuilder
| }
cbf: scala.collection.generic.CanBuildFrom[IndexedSeq[Byte],Char,String]{def apply(from: IndexedSeq[Byte]): StringBuilder; def apply(): StringBuilder} = $anon$1@4f820f42
scala> x.map(_.toChar)(cbf)
res0: String = AAA