Avro序列化与反序列化
来源:互联网 发布:强袭魔女 知乎 编辑:程序博客网 时间:2024/04/27 07:56
参考资料:
Avro Api:
http://avro.apache.org/docs/current/api/java/index.html
大牛的博客:
http://blog.csdn.net/xyw_blog/article/details/8967362
http://www.cnblogs.com/fillPv/p/5009737.html
http://blog.kazaff.me/2015/04/30/Avro%E7%9A%84%E4%B8%89%E7%A7%8D%E5%BA%8F%E5%88%97%E5%8C%96%E4%B8%8E%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%96%B9%E6%B3%95/
1、下载avro-1.7.7.jar and avro-tools-1.7.7.jar两个jar包,放到指定文件目录。下载地址 http://www.trieuvan.com/apache/avro/avro-1.7.7/java/
将jar包放入制定的文件夹下
2、该目录下新建user.avsc文件,内容是:
{“namespace”: “example.avro”,
“type”: “record”,
“name”: “User”,
“fields”: [
{“name”: “name”, “type”: “string”},
{“name”: “favorite_number”, “type”: [“int”, “null”]},
{“name”: “favorite_color”, “type”: [“string”, “null”]}
]
}
3、打开cmd,进入到该目录,执行命令生成User类,注意命令后面有个”.”,表示生成的代码放在本目录下。
java -jar avro-tools-1.7.7.jar compile schema user.avsc java .
在该文件夹下的Java文件下的../example/avro/目录下就会生成User.java文件。
4.使用eclipse新建maven项目,在pom.xml加入avro的依赖。
org.apache.avro
avro
1.7.7
5. 把生成的User.java类复制到工程中,注意这个User.java里面生成的User类及其内部类的包名默认是user.avsc文件中的namespace的值,
在本例中也就是example.avro。需要全部替换为自己的包名。
有兴趣可自行查看生成的User.java类
6.
用java实现序列化与反序列化
package com.netease.kafka.hdfs.avro;import java.io.File;import java.io.IOException;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;/** * * @author bjfeixiuhong 2016年6月27日 Serialize User to disk/Deserialize disk to User */public class AvroTest { public static void SerializeUser() throws IOException { // User user1 = new User(); user1.setName("zhangsan"); user1.setFavoriteNumber(21); user1.setFavoriteColor(null); // Alternate constructor User user2 = new User("Ben", 7, "red"); // Construct via builder User user3 = User.newBuilder().setName("Charlie") .setFavoriteColor("blue").setFavoriteNumber(null).build(); String path = "D:\\tmp\\user.avro"; // avro文件存放目录 DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>( User.class); DataFileWriter<User> dataFileWriter = new DataFileWriter<User>( userDatumWriter); dataFileWriter.create(user1.getSchema(), new File(path)); // 把生成的user对象写入到avro文件 dataFileWriter.append(user1); dataFileWriter.append(user2); dataFileWriter.append(user3); dataFileWriter.close(); } public static void DeserializeUser() throws IOException{ DatumReader<User> userDatumReader=new SpecificDatumReader<User>(User.class); File file=new File("D:\\tmp\\user.avro"); DataFileReader<User> dataFileReader=new DataFileReader<User>(file,userDatumReader); User user=null; while(dataFileReader.hasNext()){ user=dataFileReader.next(); System.out.println(user); } } public static void main(String[] args) throws IOException { SerializeUser(); DeserializeUser(); }}
- Avro序列化与反序列化
- Apache Avro 序列化与反序列化 (Java 实现)
- Avro序列化/反序列化
- avro反序列化
- Avro实现序列化和反序列化
- hadoop深入研究:(十六)——Avro序列化与反序列化
- java jackson avro kryo等几种序列化与反序列化工具的使用
- 序列化与反序列
- 序列化与反序列
- Avro序列化操作(2):序列化和反序列化
- 如何用Avro在内存中实现序列化 和反序列化
- 序列化--反序列化:Schema evolution in Avro, Protocol Buffers and Thrift
- XML序列化与反序列化
- 对象序列化与反序列化
- 序列化与反序列化
- 转载:序列化与反序列化
- c#序列化与反序列化
- java序列化与反序列化
- phpcms上传提示找不到临时文件夹/目录(解决方法)
- 大牛的距离(笑cry)精简算法
- linux安装常用命令工具包wget,cmake等
- Android开源项目推荐之「图片加载到底哪家强」
- 时间序列数据库的秘密(3)——加载和分布式计算
- Avro序列化与反序列化
- ubuntu英文系统下怎样安装中文输入法
- 【C#中的as和强制转换的区别】
- Leetcode-search-insert-position
- 什么时候用DFS,什么时候用BFS?
- NSKeyedArchiver
- 剑指offer题解 两个链表的第一个公共结点
- MySQL行级锁、表级锁、页级锁详细介绍
- 6410 内核的uboot-分析笔记