avro序列化和反序列化——使用生成类方式

主要参考:
上一篇文章说的是如何通过.avsc的schema文件生成对应的java类。现在我们要研究的是avro的序列化和反序列化。

序列化:

package com.xueyou.avro.demo;

import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumWriter;

import java.io.File;

public class App {
    public static void main(String[] args) throws Exception {
        System.out.println("Hello World!");
        User user = User.newBuilder().setName("xiaoming")
                .setFavoriteNumber(12)
                .setFavoriteColor("blue")
                .build();
        User user2 = User.newBuilder().setName("xiaogang")
                .setFavoriteColor(null)
                .setFavoriteNumber(null)
                .build();
        System.out.println(user);
        System.out.println(user2);
        File file = new File("users.avro");
        DatumWriter<User> datumWriter = new SpecificDatumWriter<User>(User.class);
        DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(datumWriter);
        dataFileWriter.create(user.getSchema(), file);
        dataFileWriter.append(user);
        dataFileWriter.append(user2);
        dataFileWriter.close();
    }
}

反序列化:
package com.xueyou.avro.demo;

import org.apache.avro.file.DataFileReader;
import org.apache.avro.io.DatumReader;
import org.apache.avro.specific.SpecificDatumReader;

import java.io.File;

public class App2 {
    public static void main(String[] args) throws Exception {
        File file = new File("users.avro");
        DatumReader<User> datumReader = new SpecificDatumReader<User>(User.class);
        DataFileReader<User> dataFileReader = new DataFileReader<User>(file, datumReader);
        User user = null;
        while (dataFileReader.hasNext()) {
            user = dataFileReader.next(user);
            System.out.println(user);

        }
    }
}
运行结果:

猜你喜欢

转载自blog.csdn.net/wild46cat/article/details/80963111