public ChunkListInfo fetchChunkListByChunkGroupOffset()

in tsfile-viewer-core/src/main/java/org/apache/iotdb/tool/core/service/TsFileAnalyserV13.java [338:379]


  public ChunkListInfo fetchChunkListByChunkGroupOffset(long offset) throws IOException {
    List<IChunkMetadata> chunkMetadataList = new ArrayList<>();
    List<ChunkHeader> chunkHeaderList = new ArrayList<>();
    reader.position(offset);

    // 1. 读 chunkGroup header
    ChunkGroupHeader chunkGroupHeader = reader.readChunkGroupHeader();

    List<long[]> timeBatch = new ArrayList<>();
    List<IChunkMetadata> alignedValueChunkMetadata = new ArrayList<>();
    byte marker = -1;

    ChunkGroupMetaInfo chunkGroupMetaInfo =
        new ChunkGroupMetaInfo(
            marker, chunkMetadataList, chunkHeaderList, timeBatch, null, alignedValueChunkMetadata);

    // 2. 读取 chunk
    while (((marker = reader.readMarker()) != MetaMarker.CHUNK_GROUP_HEADER)
        && (marker != MetaMarker.OPERATION_INDEX_RANGE)
        && (marker != MetaMarker.SEPARATOR)) {
      chunkGroupMetaInfo.setMarker(marker);
      fetchChunkInfo(chunkGroupMetaInfo);
    }

    // 3. 存储上 ChunkGroup 已读取的信息
    // 3.1 如果是对齐 Chunk
    if (chunkGroupMetaInfo.getAlignedTimeChunkMetadata() != null
        && chunkGroupMetaInfo.getAlignedValueChunkMetadata().size() > 0) {
      chunkGroupMetaInfo
          .getChunkMetadataList()
          .add(
              new AlignedChunkMetadata(
                  chunkGroupMetaInfo.getAlignedTimeChunkMetadata(),
                  new ArrayList<>(chunkGroupMetaInfo.getAlignedValueChunkMetadata())));
    }

    ChunkListInfo chunkListInfo =
        new ChunkListInfo(
            chunkGroupMetaInfo.getChunkMetadataList(), chunkGroupMetaInfo.getChunkHeaderList());

    return chunkListInfo;
  }