public Chunk rewrite()

in java/tsfile/src/main/java/org/apache/tsfile/read/common/Chunk.java [317:385]


  public Chunk rewrite(TSDataType newType) throws IOException {
    if (newType == null || newType == chunkHeader.getDataType()) {
      return this;
    }
    TSEncoding encoding =
        TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder(newType));
    IMeasurementSchema schema =
        new MeasurementSchema(
            chunkHeader.getMeasurementID(), newType, encoding, chunkHeader.getCompressionType());
    ChunkWriterImpl chunkWriter = new ChunkWriterImpl(schema, encryptParam);
    ChunkReader chunkReader = new ChunkReader(this);
    List<IPageReader> pages = chunkReader.loadPageReaderList();
    for (IPageReader page : pages) {
      BatchData batchData = page.getAllSatisfiedPageData();
      IPointReader pointReader = batchData.getBatchDataIterator();
      while (pointReader.hasNextTimeValuePair()) {
        TimeValuePair point = pointReader.nextTimeValuePair();
        Object convertedValue =
            newType.castFromSingleValue(chunkHeader.getDataType(), point.getValue().getValue());
        long timestamp = point.getTimestamp();
        if (convertedValue == null) {
          throw new IOException("NonAlignedChunk contains null, timestamp: " + timestamp);
        }
        switch (newType) {
          case BOOLEAN:
            chunkWriter.write(timestamp, (boolean) convertedValue);
            break;
          case DATE:
          case INT32:
            chunkWriter.write(timestamp, (int) convertedValue);
            break;
          case TIMESTAMP:
          case INT64:
            chunkWriter.write(timestamp, (long) convertedValue);
            break;
          case FLOAT:
            chunkWriter.write(timestamp, (float) convertedValue);
            break;
          case DOUBLE:
            chunkWriter.write(timestamp, (double) convertedValue);
            break;
          case TEXT:
          case STRING:
          case BLOB:
            chunkWriter.write(timestamp, (Binary) convertedValue);
            break;
          default:
            throw new IOException("Unsupported data type: " + newType);
        }
      }
      chunkWriter.sealCurrentPage();
    }
    ByteBuffer newChunkData = chunkWriter.getByteBuffer();
    ChunkHeader newChunkHeader =
        new ChunkHeader(
            chunkHeader.getChunkType(),
            chunkHeader.getMeasurementID(),
            newChunkData.capacity(),
            newType,
            chunkHeader.getCompressionType(),
            encoding);
    chunkData.flip();
    return new Chunk(
        newChunkHeader,
        newChunkData,
        deleteIntervalList,
        chunkWriter.getStatistics(),
        encryptParam);
  }