package org.yamcs.yarch; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Optional; import org.yamcs.parameter.ParameterValue; import org.yamcs.yarch.ColumnSerializerFactory.AbstractColumnSerializer; import com.google.common.io.ByteStreams; public class ParameterValueColumnSerializer extends AbstractColumnSerializer<ParameterValue>{ public ParameterValueColumnSerializer() { super(16); } @Override public ParameterValue deserialize(DataInputStream stream, ColumnDefinition cd) throws IOException { int size = stream.readInt(); if(size>ColumnSerializerFactory.maxBinaryLength) { throw new IOException("serialized size too big "+size+">"+ColumnSerializerFactory.maxBinaryLength); } org.yamcs.protobuf.Pvalue.ParameterValue.Builder gpvb = org.yamcs.protobuf.Pvalue.ParameterValue.newBuilder(); final InputStream limitedInput = ByteStreams.limit(stream, size); gpvb.mergeFrom(limitedInput); return ParameterValue.fromGpb(cd.getName(), gpvb.build()); } @Override public void serialize(DataOutputStream stream, ParameterValue pv) throws IOException { org.yamcs.protobuf.Pvalue.ParameterValue gpv = pv.toProtobufParameterValue(Optional.empty(), false); int size = gpv.getSerializedSize(); stream.writeInt(size); gpv.writeTo(stream); } }