public void writeColumnBuilderWithNextBatch()

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