我正在使用kryo反序列化一个最初在spark中序列化的类。kryo以bigendian格式编写其所有原语,但是当我尝试在另一台计算机上反序列化这些值时,返回的值就好像是littleendian一样。
KRYO的基本方法:
public int readInt () throws KryoException {
require(4); // Does a basic positionality check that passes in this case
byte[] buffer = this.buffer;
int p = this.position;
this.position = p + 4;
return buffer[p] & 0xFF //
| (buffer[p + 1] & 0xFF) << 8 //
| (buffer[p + 2] & 0xFF) << 16 //
| (buffer[p + 3] & 0xFF) << 24;
}
这将返回值0x7000000。但是当我的程序(在scala中)使用kryo的
readByte
方法:
public byte readByte () throws KryoException {
if (position == limit) require(1);
return buffer[position++];
}
并分别读取字节,如下所示:
val a = input.readByte()
val b = input.readByte()
val c = input.readByte()
val d = input.readByte()
val x = (a & 0xFF) << 24 | (b & 0xFF) << 16 | (c & 0xFF) << 8 | d & 0xFF
然后我得到x的0x70。我不明白这里发生了什么。是斯卡拉和Java之间的某种转换问题,还是与KyRo和下位字节数组有关?