Serialization

serialization5AvroDemo

Path
pkg20serialization/src/main/java/pkg20serialization/serialization5AvroDemo.java
Package
pkg20serialization
Study order
5
Run
Maven module
Command
mvn -f pkg20serialization/pom.xml compile
Dependencies
org.apache.avro.Schema, org.apache.avro.generic.GenericData, org.apache.avro.generic.GenericDatumReader, org.apache.avro.generic.GenericDatumWriter, org.apache.avro.generic.GenericRecord

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg20serialization/src/main/java/pkg20serialization/serialization5AvroDemo.java
1package pkg20serialization;2 3import org.apache.avro.Schema;4import org.apache.avro.generic.GenericData;5import org.apache.avro.generic.GenericDatumReader;6import org.apache.avro.generic.GenericDatumWriter;7import org.apache.avro.generic.GenericRecord;8import org.apache.avro.io.*;9 10import java.io.ByteArrayInputStream;11import java.io.ByteArrayOutputStream;12 13/*14 * serialization5AvroDemo.java — Apache Avro: schema-evolvable binary serialization.15 */16public class serialization5AvroDemo {17 18    static final String SCHEMA_JSON = """19            {"type":"record","name":"User","fields":[20              {"name":"id","type":"int"},21              {"name":"name","type":"string"}22            ]}""";23 24    public static void main(String[] args) throws Exception {25        Schema schema = new Schema.Parser().parse(SCHEMA_JSON);26        GenericRecord record = new GenericData.Record(schema);27        record.put("id", 7);28        record.put("name", "Linus");29 30        ByteArrayOutputStream out = new ByteArrayOutputStream();31        DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);32        Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);33        writer.write(record, encoder);34        encoder.flush();35 36        byte[] bytes = out.toByteArray();37        System.out.println("Avro binary length: " + bytes.length);38 39        DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);40        Decoder decoder = DecoderFactory.get().binaryDecoder(new ByteArrayInputStream(bytes), null);41        GenericRecord parsed = reader.read(null, decoder);42        System.out.println("Avro parsed: id=" + parsed.get("id") + ", name=" + parsed.get("name"));43    }44}