注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[avro] Hello, Avro Java!  

2011-03-13 12:11:49|  分类: serialize_avro |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
还是java版的avro实现得比较全,额,不过千年不写java code,写起来还真费劲。

弄了个小程序。
1. writetest: 根据 schema 把数据写到一个 file container
2. readtest: 打开 file container,将其中的数据 print 出来

avro 需要依赖这个 json 库:

------------------------------------------------------------------------------
package kcode.avro.java;

import java.io.File;
import java.io.IOException;

import org.apache.avro.Schema;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericDatumReader;

class HelloAvro {
    static private void appendPerson(DataFileWriter<GenericData.Record> writer,
                                        Schema aSchema, long id, String name) throws IOException {
        GenericData.Record aPerson = new GenericData.Record(aSchema);
        aPerson.put("ID", id);
        aPerson.put("Name", name);
        writer.append(aPerson);
    }

    static private void writeTest() throws IOException {
        Schema aSchema = Schema.parse(new File("decl/Person.json"));

        DataFileWriter<GenericData.Record> writer = new DataFileWriter<GenericData.Record>(
                new GenericDatumWriter<GenericData.Record>());
        writer.create(aSchema, new File("output/Person.db"));
        appendPerson(writer, aSchema, 1001, "kasicass");
        appendPerson(writer, aSchema, 1002, "phay");
        writer.close();
    }

    static private void printPerson(GenericData.Record aPerson) {
        System.out.println("aPerson, id=" + aPerson.get("ID") + ", name=" + aPerson.get("Name"));
    }

    static private void readTest() throws IOException {
        DataFileReader<GenericData.Record> reader = new DataFileReader<GenericData.Record>(new File("output/Person.db"),
                new GenericDatumReader<GenericData.Record>());
        while (reader.hasNext()) {
            GenericData.Record aPerson = reader.next();
            printPerson(aPerson);
        }
    }

    static public void main(String[] args) throws IOException {
        if (args.length != 1) {
            System.out.println("usage:");
            System.out.println("  ./a.out <readtest|writetest>");
            return;
        }

        if (args[0].equals("readtest")) {
            readTest();
        } else {
            writeTest();
        }
    }
}
------------------------------------------------------------------------------

  评论这张
 
阅读(1772)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017