/** * Encode record to byte array. * * @param record the object to encode * @return the byte[] * @throws IOException Signals that an I/O exception has occurred. */ public byte[] encode(T record) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); binaryEncoder = EncoderFactory.get().binaryEncoder(baos, binaryEncoder); datumWriter.write(record, binaryEncoder); binaryEncoder.flush(); baos.flush(); return baos.toByteArray(); }
private static <T> byte[] render(T datum, Schema schema, DatumWriter<T> writer) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.setSchema(schema); Encoder enc = new EncoderFactory().directBinaryEncoder(out, null); writer.write(datum, enc); enc.flush(); return out.toByteArray(); } }
/** * Convert a GenericRecord to a byte array. */ public static byte[] recordToByteArray(GenericRecord record) throws IOException { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { Encoder encoder = EncoderFactory.get().directBinaryEncoder(out, null); DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(record.getSchema()); writer.write(record, encoder); byte[] byteArray = out.toByteArray(); return byteArray; } }
public byte[] serialize(String topic, GenericRecord data) throws SerializationException { Schema schema = data.getSchema(); MD5Digest schemaId = null; try { schemaId = schemaRegistry.register(topic, schema); ByteArrayOutputStream out = new ByteArrayOutputStream(); // MAGIC_BYTE | schemaId-bytes | avro_payload out.write(LiAvroSerDeHelper.MAGIC_BYTE); out.write(schemaId.asBytes()); BinaryEncoder encoder = encoderFactory.directBinaryEncoder(out, null); DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema); writer.write(data, encoder); encoder.flush(); byte[] bytes = out.toByteArray(); out.close(); return bytes; } catch (IOException | SchemaRegistryException e) { throw new SerializationException(e); } }
/** * Encode record to Json and then convert to byte array. * * @param record the object to encode * @return the byte[] * @throws IOException Signals that an I/O exception has occurred. */ public byte[] encodeToJsonBytes(T record) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); jsonEncoder = EncoderFactory.get().jsonEncoder(this.schema, baos, true); datumWriter.write(record, jsonEncoder); jsonEncoder.flush(); baos.flush(); return baos.toByteArray(); }
private static void checkJson(Schema schema, Object datum, DatumWriter<Object> writer, DatumReader<Object> reader) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); Encoder encoder = EncoderFactory.get().jsonEncoder(schema, out); writer.setSchema(schema); writer.write(datum, encoder); writer.write(datum, encoder); encoder.flush(); byte[] data = out.toByteArray(); reader.setSchema(schema); Decoder decoder = DecoderFactory.get().jsonDecoder(schema, new ByteArrayInputStream(data)); Object decoded = reader.read(null, decoder); assertEquals("Decoded data does not match.", datum, decoded); decoded = reader.read(decoded, decoder); assertEquals("Decoded data does not match.", datum, decoded); }
public static void checkBlockingBinary(Schema schema, Object datum, DatumWriter<Object> writer, DatumReader<Object> reader) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.setSchema(schema); Encoder encoder = EncoderFactory.get().blockingBinaryEncoder(out, null); writer.write(datum, encoder); encoder.flush(); byte[] data = out.toByteArray(); reader.setSchema(schema); Object decoded = reader.read(null, DecoderFactory.get() .binaryDecoder(data, null)); assertEquals("Decoded data does not match.", datum, decoded); }
/** * Read a single byte from the stream. */ @Override public int read() throws IOException { if (pos < buffer.length) { return buffer[pos++]; } if (!fileReader.hasNext()) { return -1; } writer.write(fileReader.next(), encoder); encoder.flush(); if (!fileReader.hasNext()) { // Write a new line after the last Avro record. output.write(System.getProperty("line.separator") .getBytes(StandardCharsets.UTF_8)); output.flush(); } pos = 0; buffer = output.toByteArray(); output.reset(); return read(); }
@Override public byte[] serialize(Row row) { try { // convert to record final GenericRecord record = convertRowToAvroRecord(schema, row); arrayOutputStream.reset(); datumWriter.write(record, encoder); encoder.flush(); return arrayOutputStream.toByteArray(); } catch (Exception e) { throw new RuntimeException("Failed to serialize row.", e); } }
@Override public String toString(final ClassHierarchy classHierarchy) throws IOException { final DatumWriter<AvroNode> classHierarchyWriter = new SpecificDatumWriter<>(AvroNode.class); try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) { final JsonEncoder encoder = EncoderFactory.get().jsonEncoder(AvroNode.SCHEMA$, out); classHierarchyWriter.write(toAvro(classHierarchy), encoder); encoder.flush(); out.flush(); return out.toString(JSON_CHARSET); } }
dout.setSchema(sch); Encoder vout = factory.directBinaryEncoder(out, null); vout.writeLong(numObjects); // metadata:the count of objects in the file dout.write(datum, bufOut); blockCount++; if (buffer.size() >= SYNC_INTERVAL) { writeBlock(vout, out);
@Override public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException { WRITER$.write(this, SpecificData.getEncoder(out)); }
private void writeObject(ObjectOutputStream out) throws IOException { out.writeObject(avroObject.getSchema().toString()); DatumWriter<T> writer = new GenericDatumWriter<>(); writer.setSchema(avroObject.getSchema()); Encoder encoder = EncoderFactory.get().binaryEncoder(out, null); writer.write(avroObject, encoder); encoder.flush(); }
@Override public void encode(D datum, OutputStream stream) throws IOException { BinaryEncoder encoder = EncoderFactory.get() .directBinaryEncoder(stream, ENCODER.get()); ENCODER.set(encoder); writer.write(datum, encoder); encoder.flush(); }
public void toStream(final OutputStream stream, final Record object, @Nullable final Set<URI> propertiesToSerialize) throws IOException { final Object generic = encodeRecord(object, propertiesToSerialize); final Encoder encoder = EncoderFactory.get().directBinaryEncoder(stream, null); final DatumWriter<Object> writer = new GenericDatumWriter<Object>(Schemas.NODE); writer.write(generic, encoder); encoder.flush(); }
private void dumpJson(PrintStream out, Schema schema, Object datum) throws IOException { DatumWriter<Object> writer = new GenericDatumWriter<>(schema); JsonEncoder jsonEncoder = EncoderFactory.get().jsonEncoder(schema, out, true); writer.write(datum, jsonEncoder); jsonEncoder.flush(); out.println(); out.flush(); }
BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(byteBufferOutputStream, null); handshakeWriter.write(rq, encoder); encoder.flush();
@Override public void writeRequest(Schema schema, Object request, Encoder out) throws IOException { Object[] args = (Object[])request; int i = 0; for (Schema.Field param : schema.getFields()) getDatumWriter(param.schema()).write(args[i++], out); }
/** * Sends messages using message writer */ private void sendMessages() throws IOException { bufferMessagesToSend(); encoder.setItemCount(monitorMessages.size()); for (GenericRecord monitorMessage : monitorMessages) { encoder.startItem(); messageWriter.write(monitorMessage, encoder); } monitorMessages.clear(); }