public static DataPackNode_Basic from(int version, SegmentMode mode, ByteSlice buffer) {
        DataPackNode_Basic dpn = new DataPackNode_Basic(version, mode);
        int offset = 0;
        dpn.packType = buffer.get(offset += 0);
        dpn.objCount = buffer.getInt(offset += 1);
        dpn.packAddr = buffer.getLong(offset += 4);
        dpn.packSize = buffer.getInt(offset += 8);
        dpn.numType = buffer.get(offset += 4);
        dpn.uniformMin = buffer.getLong(offset += 1);
        dpn.uniformMax = buffer.getLong(offset += 8);

        if (version <= Version.VERSION_1_ID) {
            // It is a very stupid bug exists only before version_1.
            // The offset after uniformMax should plus 8 not 4.
            // But lots of data already generated so we have to keep this code.
            dpn.maxObjLen = buffer.getInt(offset += 4);
        } else {
            dpn.maxObjLen = buffer.getInt(offset += 8);
        }

        dpn.compress = (buffer.get(offset += 4) & 0x01) == 1;
        dpn.indexAddr = buffer.getLong(offset += 1);
        dpn.indexSize = buffer.getInt(offset += 8);
        dpn.minValue = buffer.getLong(offset += 4);
        dpn.maxValue = buffer.getLong(offset += 8);
        if (version >= Version.VERSION_6_ID) {
            dpn.extIndexAddr = buffer.getLong(offset += 8);
            dpn.extIndexSize = buffer.getInt(offset += 8);
        }
        offset += 4;

        if (version <= Version.VERSION_1_ID) {
            // Try to do some fix.
            if (dpn.maxValue != 0 && dpn.uniformMax == 0) {
                dpn.uniformMax = dpn.maxValue;
            }
        }

        return dpn;
    }
The size greater or equal to V6
indexr-segment/src/main/java/io/indexr/segment/pack/DataPackNode_Basic.java