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