item.go
func (m *Nitro) DecodeItem(buf []byte, r io.Reader) (*Item, error) {
	if _, err := io.ReadFull(r, buf[0:2]); err != nil {
		return nil, err
	}

	l := binary.BigEndian.Uint16(buf[0:2])
	if l > 0 {
		itm := m.allocItem(int(l), m.useMemoryMgmt)
		data := itm.Bytes()
		_, err := io.ReadFull(r, data)
		return itm, err
	}

	return nil, nil
}
func (m *Nitro) DecodeItem(buf []byte, r io.Reader) (*Item, error) {
	if _, err := io.ReadFull(r, buf[0:2]); err != nil {
		return nil, err
	}

	l := binary.BigEndian.Uint16(buf[0:2])
	if l > 0 {
		itm := m.allocItem(int(l), m.useMemoryMgmt)
		data := itm.Bytes()
		_, err := io.ReadFull(r, data)
		return itm, err
	}

	return nil, nil
}
// DecodeItem decodes encoded [2 byte len][item_bytes] format.