1

scala.reflect.internal.pickling.ByteCodecs用来编码一个Array[Byte]. 有关编码方案的信息可以在这里找到。

一旦数组包含 的值127-64,-128, 1当我希望看到0(gist)时,我就会在编码字节中看到,并且我无法再解析编码字节。

scala> import scala.reflect.internal.pickling._
import scala.reflect.internal.pickling._

scala> import java.util.Arrays
import java.util.Arrays

scala> val byte = Array[Byte](127)
byte: Array[Byte] = Array(127)

scala> val byteEncoded = ByteCodecs.encode(byte)
byteEncoded: Array[Byte] = Array(-64, -128, 1)

scala> val byteDecoded = Arrays.copyOf(byteEncoded, ByteCodecs.decode(byteEncoded))
byteDecoded: Array[Byte] = Array(127, 0) //this line is as expected

这里发生了什么?

Array[Byte]如果原始数组包含一个,我怎样才能得到一个正确编码的数组127

非常感谢您查看

4

1 回答 1

1

在不知道任何细节的情况下——如果你的链式 encode->decode 再现了输入(你说它确实如此),那么它在 IMO 中可以正常工作。规范是否说明字节数组的编码方式?因为如果没有,它可以自由地做它想做的事......

查看源代码(Scala 2.10.0)

def encode(xs: Array[Byte]): Array[Byte] = avoidZero(encode8to7(xs))

这会进行一些严重的重新编码,因此我不希望在编码数组中以人类可读的形式找到您的输入数组。

于 2013-09-15T09:30:05.120 回答