protected ValueWithRecordIdCoder(Coder<ValueT> valueCoder) { this.valueCoder = valueCoder; this.idCoder = ByteArrayCoder.of(); }
@Override public byte[] decode(InputStream inStream) throws IOException, CoderException { return decode(inStream, Context.NESTED); }
@Override public void encode(byte[] value, OutputStream outStream) throws IOException, CoderException { encode(value, outStream, Context.NESTED); }
@Override public void encode(BitSet value, OutputStream outStream, Context context) throws CoderException, IOException { BYTE_ARRAY_CODER.encodeAndOwn(value.toByteArray(), outStream, context); }
@Override public BigInteger decode(InputStream inStream, Context context) throws IOException, CoderException { return new BigInteger(BYTE_ARRAY_CODER.decode(inStream, context)); }
@Override public void encode(BigInteger value, OutputStream outStream, Context context) throws IOException, CoderException { checkNotNull(value, String.format("cannot encode a null %s", BigInteger.class.getSimpleName())); BYTE_ARRAY_CODER.encode(value.toByteArray(), outStream, context); }
@Override public void encode(BitSet value, OutputStream outStream, Context context) throws CoderException, IOException { if (value == null) { throw new CoderException("cannot encode a null BitSet"); } BYTE_ARRAY_CODER.encodeAndOwn(value.toByteArray(), outStream, context); }
@Override public ByteArrayCoder fromCloudObject(CloudObject object) { return ByteArrayCoder.of(); }
@Override public void restoreKeyGroupState(int keyGroupIndex, DataInputStream in) throws Exception { checkInitCache(); Integer size = VarIntCoder.of().decode(in, Context.NESTED); for (int i = 0; i < size; i++) { byte[] idBytes = ByteArrayCoder.of().decode(in, Context.NESTED); // restore the ids which not expired. shouldOutput(keyGroupIndex, ByteBuffer.wrap(idBytes)); } }
@Override public void snapshotKeyGroupState(int keyGroupIndex, DataOutputStream out) throws Exception { Set<ByteBuffer> ids = dedupingCache.get(keyGroupIndex).asMap().keySet(); VarIntCoder.of().encode(ids.size(), out, Context.NESTED); for (ByteBuffer id : ids) { ByteArrayCoder.of().encode(id.array(), out, Context.NESTED); } }
@Override public BitSet decode(InputStream inStream, Context context) throws CoderException, IOException { return BitSet.valueOf(BYTE_ARRAY_CODER.decode(inStream, context)); }
@Override public void encode(ValueWithRecordId<ValueT> value, OutputStream outStream, Context context) throws IOException { valueCoder.encode(value.value, outStream); idCoder.encode(value.id, outStream, context); }
private static byte[] encodeToByteArrayAndOwn( ByteArrayCoder coder, byte[] value, Coder.Context context) throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); coder.encodeAndOwn(value, os, context); return os.toByteArray(); }
@Override public IsmRecord<V> decode(InputStream inStream) throws CoderException, IOException { List<Object> keyComponents = new ArrayList<>(keyComponentCoders.size()); for (Coder<?> keyCoder : keyComponentCoders) { keyComponents.add(keyCoder.decode(inStream)); } if (isMetadataKey(keyComponents)) { return IsmRecord.meta(keyComponents, ByteArrayCoder.of().decode(inStream)); } else { return IsmRecord.of(keyComponents, valueCoder.decode(inStream)); } }
@Override public void encode(OutgoingMessage value, OutputStream outStream) throws CoderException, IOException { ByteArrayCoder.of().encode(value.elementBytes, outStream); ATTRIBUTES_CODER.encode(value.attributes, outStream); BigEndianLongCoder.of().encode(value.timestampMsSinceEpoch, outStream); RECORD_ID_CODER.encode(value.recordId, outStream); }
@Override public BitSet decode(InputStream inStream, Context context) throws CoderException, IOException { return BitSet.valueOf(BYTE_ARRAY_CODER.decode(inStream, context)); }
@Override public void encode(KinesisRecord value, OutputStream outStream) throws IOException { BYTE_ARRAY_CODER.encode(value.getData().array(), outStream); STRING_CODER.encode(value.getSequenceNumber(), outStream); STRING_CODER.encode(value.getPartitionKey(), outStream); INSTANT_CODER.encode(value.getApproximateArrivalTimestamp(), outStream); VAR_LONG_CODER.encode(value.getSubSequenceNumber(), outStream); INSTANT_CODER.encode(value.getReadTime(), outStream); STRING_CODER.encode(value.getStreamName(), outStream); STRING_CODER.encode(value.getShardId(), outStream); }