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;
}