in datahub/batchrecord.go [104:141]
func (serializer *batchSerializer) serializeBatchRecord(batch *batchRecord) ([]byte, error) {
calSize := batchRecordHeaderSize
for _, bRecord := range batch.records {
calSize += bRecord.getRecordSize()
}
writer := &bytes.Buffer{}
writer.Grow(calSize)
writer.Write(make([]byte, batchRecordHeaderSize))
for _, bRecord := range batch.records {
if err := serializer.bSerializer.serializeBinaryRecord(writer, bRecord); err != nil {
return nil, err
}
}
data := writer.Bytes()
if batch.header == nil {
batch.header = &batchRecordHeader{}
}
batch.header.magic = int(batchMagicNum)
batch.header.version = 0
batch.header.rawSize = len(data) - batchRecordHeaderSize
batch.header.length = len(data)
batch.header.attributes = int16(serializer.cType.toValue() & 3)
batch.header.recordCount = len(batch.records)
data, err := serializer.compressIfNeed(data, batch)
if err != nil {
return nil, err
}
batch.header.crc32 = calculateCrc32(data[batchRecordHeaderSize:])
copy(data, serializer.serializeBatchHeader(batch.header))
return data, nil
}