当我尝试编码127的值时,为什么我的字节会出现损坏? (是,127,不是“超过127”)

时间:2013-09-14 08:26:57

标签: scala encoding byte bytearray

我正在使用scala.reflect.internal.pickling.ByteCodecsArray[Byte]进行编码。有关编码方案的信息可以找到here

一旦数组包含值127,那么当我希望看到-64,-128, 1 (gist)时,我会在编码字节中看到0,我可以不再解析编码的字节。

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,我怎样才能获得正确编码的数组?

非常感谢你看看

1 个答案:

答案 0 :(得分:1)

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

查看源代码(Scala 2.10.0)

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

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