0

PickleBuffer にバイトを書き込み、 ShowPickledでそれらを読み戻して、Pickled Scala シグネチャで遊んでいます

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

ifandmatchキーワードが書き込まれるバイトにどのように影響するかについて、私は困惑しています。

そして、おそらく誰かが修正または回避策を提案できますか?

ありがとう、ジュリアン

4

1 に答える 1

2

どのバイトが書き込まれるかに影響を与えることができる唯一の2つの方法は次のとおりです。

  1. ExtModClassRef.position実際にはそうではない0ため、書き込まれると予想されるバイトはそうではなく、後で別のものを書き込むと、レコードが破損します。

  2. ExtModClassRef.positionコールはmyBuf何らかの方法で変更されます。

独自のコードを見ずに、どちらが該当するか (またはおそらく別のものか) を判断することは不可能です。

于 2013-08-05T08:48:54.443 に答える