package org.hdp.practice.serial;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.specific.SpecificDatumWriter;
public class Avro {
public static void main(String[] args) throws Exception{
//readAvro();
//writeJavaObject();
readWriteableObject();
}
static void writeWriteableObject() throws Exception{
FileOutputStream fos = new FileOutputStream("D:/tmp/users.wobj");
DataOutputStream dos = new DataOutputStream(fos);
MyUser user1 = new MyUser();
user1.setName("Alyssa");
user1.setFavoriteNumber(256);
user1.setFavoriteColor("yellow");
user1.write(dos);
MyUser user2 = new MyUser("Ben", 7, "red");
user2.write(dos);
dos.close();
fos.close();
}
static void readWriteableObject() throws Exception{
FileInputStream fis = new FileInputStream("D:/tmp/users.wobj");
DataInputStream dis = new DataInputStream(fis);
MyUser user1 = new MyUser();
user1.readFields(dis);
System.out.println(user1);
MyUser user2 = new MyUser();
user2.readFields(dis);
System.out.println(user2);
dis.close();
}
static void writeJavaObject() throws Exception{
User user1 = new User();
user1.setName("Alyssa");
user1.setFavoriteNumber(256);
User user2 = new User("Ben", 7, "red");
User user3 = User.newBuilder()
.setName("Charlie")
.setFavoriteColor("blue")
.setFavoriteNumber(null)
.build();
FileOutputStream fos = new FileOutputStream("D:/tmp/users.jobj");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(user1);
oos.writeObject(user2);
oos.writeObject(user3);
oos.close();
fos.close();
}
static void readJavaObject() throws Exception{
FileInputStream fis = new FileInputStream("D:/tmp/users.jobj");
ObjectInputStream ois = new ObjectInputStream(fis);
User user = (User)ois.readObject();
System.out.println(user);
User user1 = (User)ois.readObject();
System.out.println(user1);
User user2 = (User)ois.readObject();
System.out.println(user2);
ois.close();
fis.close();
}
static void writeAvro() throws Exception{
User user1 = new User();
user1.setName("Alyssa");
user1.setFavoriteNumber(256);
User user2 = new User("Ben", 7, "red");
User user3 = User.newBuilder()
.setName("Charlie")
.setFavoriteColor("blue")
.setFavoriteNumber(null)
.build();
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(userDatumWriter);
dataFileWriter.create(user1.getSchema(), new File("D:/tmp/users.avro"));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();
}
static void readAvro() throws Exception{
File file = new File("D:/tmp/users.avro");
DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
User user = null;
while (dataFileReader.hasNext()) {
user = dataFileReader.next(user);
System.out.println(user);
}
dataFileReader.close();
}
}