func (w *Writer) write(rtype uint, record []byte) (err error) { rlen := len(record) buf := &w.buf buf.Reset() crc := hash.NewCRC32C() crc.Write([]byte{byte(rtype)}) crc.Write(record) binary.Write(buf, binary.LittleEndian, hash.MaskCRC32(crc.Sum32())) buf.WriteByte(byte(rlen & 0xff)) buf.WriteByte(byte(rlen >> 8)) buf.WriteByte(byte(rtype)) _, err = buf.WriteTo(w.w) if err == nil { _, err = w.w.Write(record) } return err }
func (t *Writer) write(buf []byte, bi *bInfo, raw bool) (err error) { compression := opt.NoCompression if !raw { compression = t.o.GetCompressionType() } switch compression { case opt.SnappyCompression: buf, err = snappy.Encode(nil, buf) if err != nil { return } } if bi != nil { bi.offset = uint64(t.off) bi.size = uint64(len(buf)) } _, err = t.w.Write(buf) if err != nil { return } compbit := []byte{byte(compression)} _, err = t.w.Write(compbit) if err != nil { return } crc := hash.NewCRC32C() crc.Write(buf) crc.Write(compbit) err = binary.Write(t.w, binary.LittleEndian, hash.MaskCRC32(crc.Sum32())) if err != nil { return } t.off += len(buf) + 5 return }