in java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/ValuePageReader.java [380:443]
public void writeColumnBuilderWithNextBatch(
int readEndIndex, ColumnBuilder columnBuilder, boolean[] keepCurrentRow) throws IOException {
uncompressDataIfNecessary();
if (valueBuffer == null) {
for (int i = 0; i < readEndIndex; i++) {
if (keepCurrentRow[i]) {
columnBuilder.appendNull();
}
}
return;
}
for (int i = 0; i < readEndIndex; i++) {
if (((bitmap[i / 8] & 0xFF) & (MASK >>> (i % 8))) == 0) {
if (keepCurrentRow[i]) {
columnBuilder.appendNull();
}
continue;
}
switch (dataType) {
case BOOLEAN:
boolean aBoolean = valueDecoder.readBoolean(valueBuffer);
if (keepCurrentRow[i]) {
columnBuilder.writeBoolean(aBoolean);
}
break;
case INT32:
case DATE:
int anInt = valueDecoder.readInt(valueBuffer);
if (keepCurrentRow[i]) {
columnBuilder.writeInt(anInt);
}
break;
case INT64:
case TIMESTAMP:
long aLong = valueDecoder.readLong(valueBuffer);
if (keepCurrentRow[i]) {
columnBuilder.writeLong(aLong);
}
break;
case FLOAT:
float aFloat = valueDecoder.readFloat(valueBuffer);
if (keepCurrentRow[i]) {
columnBuilder.writeFloat(aFloat);
}
break;
case DOUBLE:
double aDouble = valueDecoder.readDouble(valueBuffer);
if (keepCurrentRow[i]) {
columnBuilder.writeDouble(aDouble);
}
break;
case TEXT:
case BLOB:
case STRING:
Binary aBinary = valueDecoder.readBinary(valueBuffer);
if (keepCurrentRow[i]) {
columnBuilder.writeBinary(aBinary);
}
break;
default:
throw new UnSupportedDataTypeException(String.valueOf(dataType));
}
}
}