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); } }
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 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(); } }
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(); }
@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); } }
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(); }
@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); } }
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; }
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)); }
ReflectDatumWriter<X> writer = new ReflectDatumWriter<>(clazz); writer.write(obj, encoder); dataOut.flush(); dataOut.close();
@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); }
void checkReadWrite(Object object, Schema s) throws Exception { ReflectDatumWriter<Object> writer = new ReflectDatumWriter<>(s); ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.write(object, factory.directBinaryEncoder(out, null)); ReflectDatumReader<Object> reader = new ReflectDatumReader<>(s); Object after = reader.read(null, DecoderFactory.get().binaryDecoder( out.toByteArray(), null)); assertEquals(object, after); // check reflective setField works for records if (s.getType().equals(Schema.Type.RECORD)) { Object copy = object.getClass().newInstance(); for (Field f : s.getFields()) { Object val = ReflectData.get().getField(object, f.name(), f.pos()); ReflectData.get().setField(copy, f.name(), f.pos(), val); } assertEquals("setField", object, copy); } }
@Test public void testAvroEncodeIO() throws IOException { Schema schm = ReflectData.get().getSchema(AvroEncRecord.class); ReflectDatumWriter<AvroEncRecord> writer = new ReflectDatumWriter<>(schm); ByteArrayOutputStream out = new ByteArrayOutputStream(); AvroEncRecord record = new AvroEncRecord(); record.date = new java.util.Date(948833323L); writer.write(record, factory.directBinaryEncoder(out, null)); ReflectDatumReader<AvroEncRecord> reader = new ReflectDatumReader<>(schm); AvroEncRecord decoded = reader.read(new AvroEncRecord(), DecoderFactory.get().binaryDecoder( out.toByteArray(), null)); assertEquals(record, decoded); }
@Test public void testRecordIO() throws IOException { Schema schm = ReflectData.get().getSchema(SampleRecord.class); ReflectDatumWriter<SampleRecord> writer = new ReflectDatumWriter<>(schm); ByteArrayOutputStream out = new ByteArrayOutputStream(); SampleRecord record = new SampleRecord(); record.x = 5; record.y = 10; writer.write(record, factory.directBinaryEncoder(out, null)); ReflectDatumReader<SampleRecord> reader = new ReflectDatumReader<>(schm); SampleRecord decoded = reader.read(null, DecoderFactory.get().binaryDecoder( out.toByteArray(), null)); assertEquals(record, decoded); }
@Test public void testRecordWithNullIO() throws IOException { ReflectData reflectData = ReflectData.AllowNull.get(); Schema schm = reflectData.getSchema(AnotherSampleRecord.class); ReflectDatumWriter<AnotherSampleRecord> writer = new ReflectDatumWriter<>(schm); ByteArrayOutputStream out = new ByteArrayOutputStream(); // keep record.a null and see if that works Encoder e = factory.directBinaryEncoder(out, null); AnotherSampleRecord a = new AnotherSampleRecord(); writer.write(a, e); AnotherSampleRecord b = new AnotherSampleRecord(10); writer.write(b, e); e.flush(); ReflectDatumReader<AnotherSampleRecord> reader = new ReflectDatumReader<>(schm); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); Decoder d = DecoderFactory.get().binaryDecoder(in, null); AnotherSampleRecord decoded = reader.read(null, d); assertEquals(a, decoded); decoded = reader.read(null, d); assertEquals(b, decoded); }
record.i11 = new java.util.Date(11L); writer.write(record, factory.directBinaryEncoder(out, null)); ReflectDatumReader<multipleAnnotationRecord> reader = new ReflectDatumReader<>(schm);
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 public void serialize(T value, DataOutputView target) throws IOException { checkAvroInitialized(); this.encoder.setOut(target); this.writer.write(value, this.encoder); }
@Override public void write(DataOutput out) throws IOException { // the null flag if (datum() == null) { out.writeBoolean(false); } else { out.writeBoolean(true); DataOutputEncoder encoder = getEncoder(); encoder.setOut(out); getWriter().write(datum(), encoder); } }