AvroDemo.java
Download AvroDemo.java
1: // Simple Avro binary format example. Taken from their Quick Start guide at
2: // <https://avro.apache.org/docs/current/gettingstartedjava.html>.
3: // In this code, we first build a schema in the file "user.avsc" that looks
4: // like this:
5: // {"namespace": "example.avro",
6: // "type": "record",
7: // "name": "User",
8: // "fields": [
9: // {"name": "name", "type": "string"},
10: // {"name": "favorite_number", "type": ["int", "null"]},
11: // {"name": "favorite_color", "type": ["string", "null"]}
12: // ]
13: // }
14: //
15: // And compile that to the class "example.avro.User" via the command:
16: // java -jar avro-tools-1.8.2.jar compile schema user.avsc .
17: //
18: // To avoid unnecessary logging messages, place all four jar files
19: // (two avro ones, two jackson JSON ones) in the current folder and compile:
20: // C:\Temp\AvroDemo>javac -Xlint:all -cp .;./* AvroDemo.java
21: // Then run:
22: // C:\Temp\AvroDemo>java -cp .;./* AvroDemo
23: //
24: // Written 6/2017 by Wayne Pollock, Tampa Florida USA
25:
26: import java.io.*;
27: import example.avro.User; // The generated class
28: import org.apache.avro.io.*;
29: import org.apache.avro.file.*;
30: import org.apache.avro.specific.*;
31:
32: public class AvroDemo {
33: private static String AVRO_DATA = "users.avro";
34:
35: public static void main ( String[] args ) throws Exception {
36:
37: // Create objects from user schema three ways:
38: // Simple constructor:
39: User user1 = new User();
40: user1.setName("Alyssa");
41: user1.setFavoriteNumber(256);
42: // Leave favorite color null
43:
44: // Alternate constructor:
45: User user2 = new User("Ben", 7, "red");
46:
47: // Construct via builder
48: User user3 = User.newBuilder()
49: .setName("Charlie")
50: .setFavoriteColor("blue")
51: .setFavoriteNumber(null)
52: .build();
53:
54: // Serialize user1, user2 and user3 to file "users.avro":
55: DatumWriter<User> userDatumWriter
56: = new SpecificDatumWriter<User>(User.class);
57: DataFileWriter<User> dataFileWriter
58: = new DataFileWriter<User>(userDatumWriter);
59: dataFileWriter.create(user1.getSchema(), new File(AVRO_DATA));
60: dataFileWriter.append(user1);
61: dataFileWriter.append(user2);
62: dataFileWriter.append(user3);
63: dataFileWriter.close();
64:
65: // Read serialized data:
66: // Deserialize Users from disk
67: DatumReader<User> userDatumReader
68: = new SpecificDatumReader<User>(User.class);
69: DataFileReader<User> dataFileReader
70: = new DataFileReader<User>(new File(AVRO_DATA), userDatumReader);
71:
72: User user = null;
73: System.out.println("\n\tUsers from file \"" + AVRO_DATA + "\":");
74: while ( dataFileReader.hasNext() ) {
75: user = dataFileReader.next(user);
76: System.out.println(user); // The generated class includes toString.
77: }
78: }
79: }