All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nextbreakpoint.flink.dummies.SampledTemperatureSplitSerializer Maven / Gradle / Ivy

The newest version!
/*
 * This file is part of Flink Dummies
 * https://github.com/nextbreakpoint/flink-dummies
 */
package com.nextbreakpoint.flink.dummies;

import org.apache.flink.core.io.SimpleVersionedSerializer;
import org.apache.flink.core.memory.DataInputDeserializer;
import org.apache.flink.core.memory.DataOutputSerializer;

import java.io.IOException;
import java.util.ArrayList;

public class SampledTemperatureSplitSerializer implements SimpleVersionedSerializer {
    private static final int CURRENT_VERSION = 1;

    @Override
    public int getVersion() {
        return CURRENT_VERSION;
    }

    @Override
    public byte[] serialize(SampledTemperatureSplit split) throws IOException {
        final DataOutputSerializer out = new DataOutputSerializer(8 + 4);
        serializeV1(out, split);
        return out.getCopyOfBuffer();
    }

    @Override
    public SampledTemperatureSplit deserialize(int version, byte[] bytes) throws IOException {
        if (version != CURRENT_VERSION) {
            throw new IOException("Unrecognized version: " + version);
        }
        final DataInputDeserializer in = new DataInputDeserializer(bytes);
        return deserializeV1(in);
    }

    public static void serializeV1(DataOutputSerializer out, SampledTemperatureSplit split) throws IOException {
        out.writeUTF(split.splitId());
        out.writeInt(split.getMaxCount());
        out.writeLong(split.getMaxDelay());
        out.writeInt(split.getSensors().size());
        for (TemperatureSensor temperature : split.getSensors()) {
            out.writeUTF(temperature.getSensorId());
            out.writeUTF(temperature.getLocationId());
            out.writeInt(temperature.getValue());
        }
    }

    public static SampledTemperatureSplit deserializeV1(DataInputDeserializer in) throws IOException {
        final String splitId = in.readUTF();
        final int maxCount = in.readInt();
        final long maxDelay = in.readLong();
        final int num = in.readInt();
        final ArrayList temperatures = new ArrayList<>(num);
        for (int remaining = num; remaining > 0; remaining--) {
            final String sensorId = in.readUTF();
            final String locationId = in.readUTF();
            final Integer temperature = in.readInt();
            final TemperatureSensor sensor = TemperatureSensor.builder()
                    .withSensorId(sensorId)
                    .withLocationId(locationId)
                    .withValue(temperature)
                    .build();
            temperatures.add(sensor);
        }
        return new SampledTemperatureSplit(splitId, maxCount, maxDelay, temperatures);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy