/home/wpollock1/public_html/AJava/AvroDemo/AvroDemo.java
// Simple Avro binary format example. Taken from their Quick Start guide at
// <https://avro.apache.org/docs/current/gettingstartedjava.html>.
// In this code, we first build a schema in the file "user.avsc" that looks
// like this:
// {"namespace": "example.avro",
// "type": "record",
// "name": "User",
// "fields": [
// {"name": "name", "type": "string"},
// {"name": "favorite_number", "type": ["int", "null"]},
// {"name": "favorite_color", "type": ["string", "null"]}
// ]
// }
//
// And compile that to the class "example.avro.User" via the command:
// java -jar avro-tools-1.8.2.jar compile schema user.avsc .
//
// To avoid unnecessary logging messages, place all four jar files
// (two avro ones, two jackson JSON ones) in the current folder and compile:
// C:\Temp\AvroDemo>javac -Xlint:all -cp .;./* AvroDemo.java
// Then run:
// C:\Temp\AvroDemo>java -cp .;./* AvroDemo
//
// Written 6/2017 by Wayne Pollock, Tampa Florida USA
import java.io.*;
import example.avro.User; // The generated class
import org.apache.avro.io.*;
import org.apache.avro.file.*;
import org.apache.avro.specific.*;
public class AvroDemo {
private static String AVRO_DATA = "users.avro";
public static void main ( String[] args ) throws Exception {
// Create objects from user schema three ways:
// Simple constructor:
User user1 = new User();
user1.setName("Alyssa");
user1.setFavoriteNumber(256);
// Leave favorite color null
// Alternate constructor:
User user2 = new User("Ben", 7, "red");
// Construct via builder
User user3 = User.newBuilder()
.setName("Charlie")
.setFavoriteColor("blue")
.setFavoriteNumber(null)
.build();
// Serialize user1, user2 and user3 to file "users.avro":
DatumWriter<User> userDatumWriter
= new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter
= new DataFileWriter<User>(userDatumWriter);
dataFileWriter.create(user1.getSchema(), new File(AVRO_DATA));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();
// Read serialized data:
// Deserialize Users from disk
DatumReader<User> userDatumReader
= new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader
= new DataFileReader<User>(new File(AVRO_DATA), userDatumReader);
User user = null;
System.out.println("\n\tUsers from file \"" + AVRO_DATA + "\":");
while ( dataFileReader.hasNext() ) {
user = dataFileReader.next(user);
System.out.println(user); // The generated class includes toString.
}
}
}