当我尝试从内部写if语句或模式匹配时,为什么我的字节似乎被破坏了

时间:2013-08-05 06:49:06

标签: scala byte scala-compiler

我正在使用Pickled Scala签名,将字节写入PickleBuffer并使用ShowPickled将其读回。

我可以使用

按预期编写和回读Int

PB.myBuf.writeByte(2)

中给出'2'(在这种情况下对条目号的引用)

1(MyRecord) 2 40[case] 5

但是,如果我在条件中的相同代码,如:

if (ExtModClassRef.position==0) PB.myBuf.writeByte(2)

ExtModClassRef.position match {case 0 => PB.myBuf.writeByte(2)}

然后我读回的字节是乱码:

0,4: CLASSsym 4: 1(MyRecordmodels\00\00 ...

而不是前几个条目应该如何:

0,4: CLASSsym 4: 1(MyRecord) 2 40[case] 5 1,10: TYPEname 8: MyRecord 2,20: EXTMODCLASSref 1: 3(models) 3,23: TERMname 6: models

我很困惑ifmatch关键字如何对写入的字节产生影响。

也许有人可以建议修复或解决方法?

谢谢你, 儒略

1 个答案:

答案 0 :(得分:2)

我能看到影响写入字节的唯一两种方法是:

  1. ExtModClassRef.position实际上不是0,因此您希望写入的字节数不是,并且当您稍后写入其他内容时,它会破坏记录。

  2. ExtModClassRef.position来电以某种方式修改myBuf

  3. 如果没有看到自己的代码,就无法确定是哪种情况(或者可能是不同的东西)。