public static byte[] BuildPrimaryKeyWithHeader(PrimaryKey primaryKey) { int size = ComputePrimaryKeyWithHeader(primaryKey); PlainBufferOutputStream output = new PlainBufferOutputStream(size); output.WriteRawLittleEndian32(PlainBufferConsts.HEADER); output.WriteRawByte(PlainBufferConsts.TAG_ROW_PK); byte rowChecksum = (byte)0x0, cellChecksum; foreach (var key in primaryKey) { var column = new Column(key.Key, key.Value); cellChecksum = PlainBufferCrc8.crc8((byte)0x0, column.GetNameRawData()); cellChecksum = column.Value.GetChecksum(cellChecksum); WritePrimaryKeyColumn(column, output, cellChecksum); rowChecksum = PlainBufferCrc8.crc8(rowChecksum, cellChecksum); } // 没有deleteMarker, 要与0x0做crc. rowChecksum = PlainBufferCrc8.crc8(rowChecksum, (byte)0x0); output.WriteRawByte(PlainBufferConsts.TAG_ROW_CHECKSUM); output.WriteRawByte(rowChecksum); if (!output.IsFull()) { throw new IOException("Bug: serialize primary key failed."); } return(output.GetBuffer()); }
private void GenerateChecksum() { this.checksum = PlainBufferCrc8.GetChecksum((byte)0x0, this); this.hasChecksum = true; }