几种序列化的实现方法 java自带, Writable, Avro

来源:互联网 发布:java敏感词过滤算法 编辑:程序博客网 时间:2024/04/29 21:43

 

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();}}

 

  • serial.zip (4 KB)
  • 下载次数: 0
原创粉丝点击