我正在使用scala.reflect.internal.pickling.ByteCodecs
对Array[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
,我怎样才能获得正确编码的数组?
非常感谢你看看
答案 0 :(得分:1)
在不知道任何细节的情况下 - 如果您的链编码 - >解码再现输入(您说它确实如此),那么它可以正常工作IMO。该规范是否说明 字节数组是如何编码的?因为如果没有,它可以自由地做它想要的......
查看源代码(Scala 2.10.0)
def encode(xs: Array[Byte]): Array[Byte] = avoidZero(encode8to7(xs))
这会进行一些严格的重新编码,因此我不希望在编码数组中以人类可读的形式找到您的输入数组。