in tsfile-viewer-core/src/main/java/org/apache/iotdb/tool/core/service/TsFileAnalyserV13.java [722:780]
public BatchData fetchBatchDataByPageInfo(IPageInfo pageInfo) throws IOException {
BatchData batchData;
Decoder timeDecoder =
Decoder.getDecoderByType(
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder()),
TSDataType.INT64);
// 非对齐时间序列
// if (pageInfo instanceof PageInfo) {
if (pageInfo.getDataType() != TSDataType.VECTOR) {
PageHeader pageHeader = fetchPageHeader(pageInfo);
Decoder valueDecoder =
Decoder.getDecoderByType(pageInfo.getEncodingType(), pageInfo.getDataType());
ByteBuffer pageData = reader.readPage(pageHeader, pageInfo.getCompressionType());
PageReader pageReader =
new PageReader(
pageHeader, pageData, pageInfo.getDataType(), valueDecoder, timeDecoder, null);
batchData = pageReader.getAllSatisfiedPageData();
} else {
// 对齐时间序列
IPageInfo timePageInfo = ((AlignedPageInfo) pageInfo).getTimePageInfo();
PageHeader timePageHeader = fetchPageHeader(timePageInfo);
ByteBuffer timeByteBuffer =
reader.readPage(timePageHeader, timePageInfo.getCompressionType());
// done
List<PageHeader> valuePageHeaders = new ArrayList<>();
List<ByteBuffer> valueByteBuffers = new ArrayList<>();
List<TSDataType> valueTSDataTypes = new ArrayList<>();
List<Decoder> valueDecoders = new ArrayList<>();
List<IPageInfo> valuePageInfoList = ((AlignedPageInfo) pageInfo).getValuePageInfoList();
for (IPageInfo valuePageInfo : valuePageInfoList) {
PageHeader valuePageHeader = fetchPageHeader(valuePageInfo);
valuePageHeaders.add(valuePageHeader);
valueByteBuffers.add(reader.readPage(valuePageHeader, valuePageInfo.getCompressionType()));
valueTSDataTypes.add(valuePageInfo.getDataType());
valueDecoders.add(
Decoder.getDecoderByType(valuePageInfo.getEncodingType(), valuePageInfo.getDataType()));
}
AlignedPageReader alignedPageReader =
new AlignedPageReader(
timePageHeader,
timeByteBuffer,
timeDecoder,
valuePageHeaders,
valueByteBuffers,
valueTSDataTypes,
valueDecoders,
null);
batchData = alignedPageReader.getAllSatisfiedPageData();
}
// else {
// batchData = null;
// }
return batchData;
}