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