private static ByteBuffer measurement2Buffer(IMeasurementMNode<ICachedMNode> node) {
    int bufferLength = getRecordLength(node);
    // normal measurement
    ByteBuffer buffer = ByteBuffer.allocate(bufferLength);
    ReadWriteIOUtils.write(MEASUREMENT_TYPE, buffer);
    ReadWriteIOUtils.write((short) bufferLength, buffer);
    ReadWriteIOUtils.write(convertTags2Long(node), buffer);
    ReadWriteIOUtils.write(convertMeasStat2Long(node), buffer);
    ReadWriteIOUtils.write(node.getAlias(), buffer);
    ReadWriteIOUtils.write(node.getSchema().getProps(), buffer);
    return buffer;
  }
It is convenient to expand the semantic of the statusBytes for further status of a measurement,
e.g., preDelete, since 8 bytes are far more sufficient to represent the schema of it.

<p>Measurement MNode Record Structure: <br>
(var length record, with length member)

<ul>
  <li>1 byte: nodeType, as above
  <li>1 short (2 bytes): recLength, length of whole record
  <li>1 long (8 bytes): tagIndex, value of the offset within a measurement
  <li>1 long (8 bytes): statusBytes, including datatype/compressionType/encoding and so on
  <li>var length string (4+var_length bytes): alias
  <li>var length map (4+var_length bytes): props, serialized by {@link ReadWriteIOUtils}
</ul>

<p>It doesn't use MeasurementSchema.serializeTo for duplication of measurementId
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/RecordUtils.java