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.
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}