@Override public DatumWriter createDatumWriter(Schema schema) { return new ReflectDatumWriter(schema, this); }
public byte[] toBytes(T object) { ByteArrayOutputStream output = new ByteArrayOutputStream(); Encoder encoder = new BinaryEncoder(output); ReflectDatumWriter<T> datumWriter = null; try { datumWriter = new ReflectDatumWriter<T>(clazz); datumWriter.write(object, encoder); encoder.flush(); } catch(IOException e) { throw new SerializationException(e); } finally { SerializationUtils.close(output); } return output.toByteArray(); }
ArrayAccessor.writeArray((short[]) datum, out); } else { arrayError(elementClass, type); break; default: arrayError(elementClass, type); writeObjectArray(element, (Object[]) datum, out); out.writeArrayEnd();
private void writeObjectArray(Schema element, Object[] data, Encoder out) throws IOException { int size = data.length; out.setItemCount(size); for (int i = 0; i < size; i++) { this.write(element, data[i], out); } }
@Override protected final void writeInternal(Encoder e) throws IOException { for (int i = 0; i < sourceData.length; i++) { writer.write(sourceData[i], e); } }
@Override public DatumWriter createDatumWriter(Schema schema) { return new ReflectDatumWriter(schema, this); }
private static <T> byte[] serializeWithReflectDatumWriter(T toSerialize, Class<T> toSerializeClass) throws IOException { ReflectDatumWriter<T> datumWriter = new ReflectDatumWriter<>(toSerializeClass); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); Encoder encoder = EncoderFactory.get().binaryEncoder(byteArrayOutputStream, null); datumWriter.write(toSerialize, encoder); encoder.flush(); return byteArrayOutputStream.toByteArray(); }
private void writeObjectArray(Schema element, Object[] data, Encoder out) throws IOException { int size = data.length; out.setItemCount(size); for (int i = 0; i < size; i++) { this.write(element, data[i], out); } }
ArrayAccessor.writeArray((short[]) datum, out); } else { arrayError(elementClass, type); break; default: arrayError(elementClass, type); writeObjectArray(element, (Object[]) datum, out); out.writeArrayEnd();
/** * Constructor. * * @param writerSchema The writer schema for the Avro data being serialized. */ public AvroSerializer(Schema writerSchema) { if (null == writerSchema) { throw new IllegalArgumentException("Writer schema may not be null"); } mWriterSchema = writerSchema; mAvroDatumWriter = new ReflectDatumWriter<>(writerSchema); }
private <T> byte[] testJsonEncoder (String testType, T entityObj) throws IOException { ReflectData rdata = ReflectData.AllowNull.get(); Schema schema = rdata.getSchema(entityObj.getClass()); ByteArrayOutputStream os = new ByteArrayOutputStream(); Encoder encoder = EncoderFactory.get().jsonEncoder(schema, os); ReflectDatumWriter<T> datumWriter = new ReflectDatumWriter<>(schema, rdata); datumWriter.write(entityObj, encoder); encoder.flush(); byte[] bytes = os.toByteArray(); System.out.println ("JSON encoder output:\n" + new String(bytes)); return bytes; }
@Override public synchronized byte[] encode(T message) { try { datumWriter.write(message, this.encoder); this.encoder.flush(); return this.byteArrayOutputStream.toByteArray(); } catch (Exception e) { throw new SchemaSerializationException(e); } finally { this.byteArrayOutputStream.reset(); } }
ArrayAccessor.writeArray((short[]) datum, out); } else { arrayError(elementClass, type); break; default: arrayError(elementClass, type); writeObjectArray(element, (Object[]) datum, out); out.writeArrayEnd();
@InterfaceAudience.Private @Override public DatumWriter getWriter(Class<Object> clazz) { return new ReflectDatumWriter(); }
private static void checkBinary(ReflectData reflectData, Schema schema, Object datum, boolean equals, boolean blocking) throws IOException { ReflectDatumWriter<Object> writer = new ReflectDatumWriter<>(schema); ByteArrayOutputStream out = new ByteArrayOutputStream(); if (!blocking) { writer.write(datum, EncoderFactory.get().directBinaryEncoder(out, null)); } else { writer.write(datum, new EncoderFactory().configureBlockSize(64) .blockingBinaryEncoder(out, null)); } writer.write(datum, EncoderFactory.get().directBinaryEncoder(out, null)); byte[] data = out.toByteArray(); ReflectDatumReader<Object> reader = new ReflectDatumReader<>(schema); Object decoded = reader.read(null, DecoderFactory.get().binaryDecoder(data, null)); assertEquals(0, reflectData.compare(datum, decoded, schema, equals)); }
@Override protected void writeField(Object record, Field f, Encoder out, Object state) throws IOException { if (state != null) { FieldAccessor accessor = ((FieldAccessor[]) state)[f.pos()]; if (accessor != null) { if (accessor.supportsIO() && (!Schema.Type.UNION.equals(f.schema().getType()) || accessor.isCustomEncoded())) { accessor.write(record, out); return; } if (accessor.isStringable()) { try { Object object = accessor.get(record); write(f.schema(), (object == null) ? null : object.toString(), out); } catch (IllegalAccessException e) { throw new AvroRuntimeException("Failed to write Stringable", e); } return; } } } super.writeField(record, f, out, state); } }
ArrayAccessor.writeArray((short[]) datum, out); } else { arrayError(elementClass, type); break; default: arrayError(elementClass, type); writeObjectArray(element, (Object[]) datum, out); out.writeArrayEnd();
@Override protected DatumWriter<Object> getDatumWriter(Schema schema) { return new ReflectDatumWriter<>(schema, getReflectData()); }
@Test public void testNew() throws IOException { ByteBuffer payload = ByteBuffer.allocateDirect(8 * 1024); for (int i = 0; i < 500; i++) { payload.putInt(1); } payload.flip(); ByteBufferRecord bbr = new ByteBufferRecord(); bbr.setPayload(payload); bbr.setTp(TypeEnum.b); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ReflectDatumWriter<ByteBufferRecord> writer = new ReflectDatumWriter<ByteBufferRecord>(ByteBufferRecord.class); BinaryEncoder avroEncoder = EncoderFactory.get().blockingBinaryEncoder(outputStream, null); writer.write(bbr, avroEncoder); avroEncoder.flush(); byte[] bytes = outputStream.toByteArray(); ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); ReflectDatumReader<ByteBufferRecord> datumReader = new ReflectDatumReader<ByteBufferRecord>(ByteBufferRecord.class); BinaryDecoder avroDecoder = DecoderFactory.get().binaryDecoder(inputStream, null); ByteBufferRecord deserialized = datumReader.read(null, avroDecoder); Assert.assertEquals(bbr, deserialized); }
@Override protected void writeField(Object record, Field f, Encoder out, Object state) throws IOException { if (state != null) { FieldAccessor accessor = ((FieldAccessor[]) state)[f.pos()]; if (accessor != null) { if (accessor.supportsIO() && (!Schema.Type.UNION.equals(f.schema().getType()) || accessor.isCustomEncoded())) { accessor.write(record, out); return; } if (accessor.isStringable()) { try { Object object = accessor.get(record); write(f.schema(), (object == null) ? null : object.toString(), out); } catch (IllegalAccessException e) { throw new AvroRuntimeException("Failed to write Stringable", e); } return; } } } super.writeField(record, f, out, state); } }