亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java讀寫avro例子

2019-11-14 14:56:48
字體:
來源:轉載
供稿:網友

一、avro是一個數據序列化框架,可以高效得進行序列化和反序列化,支持C, C++, C#, java, php, Python, 和Ruby語言。現在使用Java來讀寫。

二、環境搭建

  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/

    我放到了D:/soft/avro 文件夾,在改目錄下新建java文件夾,用來存放生成的Java代碼

   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的依賴。  

<dependency>  <groupId>org.apache.avro</groupId>  <artifactId>avro</artifactId>  <version>1.7.7</version></dependency>

三、生成的User.java文件的內容如下。

  把生成的User.java類復制到工程中,注意這個User.java里面生成的User類及其內部類的包名默認是user.avsc文件中的namespace的值,

  在本例中也就是example.avro。需要全部替換為自己的包名。

  最簡單的方法就是把User.java中的example.avro全部替換為自己的包名。

/** * Autogenerated by Avro *  * DO NOT EDIT DIRECTLY */package example.avro;  @Sup)@org.apache.avro.specific.AvroGeneratedpublic class User extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {  public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{/"type/":/"record/",/"name/":/"User/",/"namespace/":/"example.avro/",/"fields/":[{/"name/":/"name/",/"type/":/"string/"},{/"name/":/"favorite_number/",/"type/":[/"int/",/"null/"]},{/"name/":/"favorite_color/",/"type/":[/"string/",/"null/"]}]}");  public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }  @Deprecated public java.lang.CharSequence name;  @Deprecated public java.lang.Integer favorite_number;  @Deprecated public java.lang.CharSequence favorite_color;  /**   * Default constructor.  Note that this does not initialize fields   * to their default values from the schema.  If that is desired then   * one should use <code>newBuilder()</code>.    */  public User() {}  /**   * All-args constructor.   */  public User(java.lang.CharSequence name, java.lang.Integer favorite_number, java.lang.CharSequence favorite_color) {    this.name = name;    this.favorite_number = favorite_number;    this.favorite_color = favorite_color;  }  public org.apache.avro.Schema getSchema() { return SCHEMA$; }  // Used by DatumWriter.  applications should not call.   public java.lang.Object get(int field$) {    switch (field$) {    case 0: return name;    case 1: return favorite_number;    case 2: return favorite_color;    default: throw new org.apache.avro.AvroRuntimeException("Bad index");    }  }  // Used by DatumReader.  Applications should not call.   @SuppressWarnings(value="unchecked")  public void put(int field$, java.lang.Object value$) {    switch (field$) {    case 0: name = (java.lang.CharSequence)value$; break;    case 1: favorite_number = (java.lang.Integer)value$; break;    case 2: favorite_color = (java.lang.CharSequence)value$; break;    default: throw new org.apache.avro.AvroRuntimeException("Bad index");    }  }  /**   * Gets the value of the 'name' field.   */  public java.lang.CharSequence getName() {    return name;  }  /**   * Sets the value of the 'name' field.   * @param value the value to set.   */  public void setName(java.lang.CharSequence value) {    this.name = value;  }  /**   * Gets the value of the 'favorite_number' field.   */  public java.lang.Integer getFavoriteNumber() {    return favorite_number;  }  /**   * Sets the value of the 'favorite_number' field.   * @param value the value to set.   */  public void setFavoriteNumber(java.lang.Integer value) {    this.favorite_number = value;  }  /**   * Gets the value of the 'favorite_color' field.   */  public java.lang.CharSequence getFavoriteColor() {    return favorite_color;  }  /**   * Sets the value of the 'favorite_color' field.   * @param value the value to set.   */  public void setFavoriteColor(java.lang.CharSequence value) {    this.favorite_color = value;  }  /** Creates a new User RecordBuilder */  public static example.avro.User.Builder newBuilder() {    return new example.avro.User.Builder();  }    /** Creates a new User RecordBuilder by copying an existing Builder */  public static example.avro.User.Builder newBuilder(example.avro.User.Builder other) {    return new example.avro.User.Builder(other);  }    /** Creates a new User RecordBuilder by copying an existing User instance */  public static example.avro.User.Builder newBuilder(example.avro.User other) {    return new example.avro.User.Builder(other);  }    /**   * RecordBuilder for User instances.   */  public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<User>    implements org.apache.avro.data.RecordBuilder<User> {    private java.lang.CharSequence name;    private java.lang.Integer favorite_number;    private java.lang.CharSequence favorite_color;    /** Creates a new Builder */    private Builder() {      super(example.avro.User.SCHEMA$);    }        /** Creates a Builder by copying an existing Builder */    private Builder(example.avro.User.Builder other) {      super(other);      if (isValidValue(fields()[0], other.name)) {        this.name = data().deepCopy(fields()[0].schema(), other.name);        fieldSetFlags()[0] = true;      }      if (isValidValue(fields()[1], other.favorite_number)) {        this.favorite_number = data().deepCopy(fields()[1].schema(), other.favorite_number);        fieldSetFlags()[1] = true;      }      if (isValidValue(fields()[2], other.favorite_color)) {        this.favorite_color = data().deepCopy(fields()[2].schema(), other.favorite_color);        fieldSetFlags()[2] = true;      }    }        /** Creates a Builder by copying an existing User instance */    private Builder(example.avro.User other) {            super(example.avro.User.SCHEMA$);      if (isValidValue(fields()[0], other.name)) {        this.name = data().deepCopy(fields()[0].schema(), other.name);        fieldSetFlags()[0] = true;      }      if (isValidValue(fields()[1], other.favorite_number)) {        this.favorite_number = data().deepCopy(fields()[1].schema(), other.favorite_number);        fieldSetFlags()[1] = true;      }      if (isValidValue(fields()[2], other.favorite_color)) {        this.favorite_color = data().deepCopy(fields()[2].schema(), other.favorite_color);        fieldSetFlags()[2] = true;      }    }    /** Gets the value of the 'name' field */    public java.lang.CharSequence getName() {      return name;    }        /** Sets the value of the 'name' field */    public example.avro.User.Builder setName(java.lang.CharSequence value) {      validate(fields()[0], value);      this.name = value;      fieldSetFlags()[0] = true;      return this;     }        /** Checks whether the 'name' field has been set */    public boolean hasName() {      return fieldSetFlags()[0];    }        /** Clears the value of the 'name' field */    public example.avro.User.Builder clearName() {      name = null;      fieldSetFlags()[0] = false;      return this;    }    /** Gets the value of the 'favorite_number' field */    public java.lang.Integer getFavoriteNumber() {      return favorite_number;    }        /** Sets the value of the 'favorite_number' field */    public example.avro.User.Builder setFavoriteNumber(java.lang.Integer value) {      validate(fields()[1], value);      this.favorite_number = value;      fieldSetFlags()[1] = true;      return this;     }        /** Checks whether the 'favorite_number' field has been set */    public boolean hasFavoriteNumber() {      return fieldSetFlags()[1];    }        /** Clears the value of the 'favorite_number' field */    public example.avro.User.Builder clearFavoriteNumber() {      favorite_number = null;      fieldSetFlags()[1] = false;      return this;    }    /** Gets the value of the 'favorite_color' field */    public java.lang.CharSequence getFavoriteColor() {      return favorite_color;    }        /** Sets the value of the 'favorite_color' field */    public example.avro.User.Builder setFavoriteColor(java.lang.CharSequence value) {      validate(fields()[2], value);      this.favorite_color = value;      fieldSetFlags()[2] = true;      return this;     }        /** Checks whether the 'favorite_color' field has been set */    public boolean hasFavoriteColor() {      return fieldSetFlags()[2];    }        /** Clears the value of the 'favorite_color' field */    public example.avro.User.Builder clearFavoriteColor() {      favorite_color = null;      fieldSetFlags()[2] = false;      return this;    }    @Override    public User build() {      try {        User record = new User();        record.name = fieldSetFlags()[0] ? this.name : (java.lang.CharSequence) defaultValue(fields()[0]);        record.favorite_number = fieldSetFlags()[1] ? this.favorite_number : (java.lang.Integer) defaultValue(fields()[1]);        record.favorite_color = fieldSetFlags()[2] ? this.favorite_color : (java.lang.CharSequence) defaultValue(fields()[2]);        return record;      } catch (Exception e) {        throw new org.apache.avro.AvroRuntimeException(e);      }    }  }}

四、用Java實現序列化,即寫avro文件。

  新建一個Java類  

     public static void main(String[] args) throws IOException {
     // 聲明并初始化User對象
     // 方式一
     User user1 = new User(); user1.setName("zhangsan"); user1.setFavoriteNumber(21); user1.setFavoriteColor(null);
     // 方式二 使用構造函數
// Alternate constructor User user2 = new User("Ben", 7, "red");      
    // 方式三,使用Build方式
// 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();
}

  run一下代碼,查看指定文件目錄是否生成了avro文件。

五、Java讀取avro文件,即實現avro反序列化。

public static void main(String[] args) throws IOException {       DatumReader<User> reader = new SpecificDatumReader<User>(User.class);       DataFileReader<User> dataFileReader = new DataFileReader<User>(new File("D://tmp//user.avro"), reader);       User user = null;       while (dataFileReader.hasNext()) {            user = dataFileReader.next();            System.out.println(user);       }      }

   運行結果:

{"name": "zhangsan", "favorite_number": 21, "favorite_color": null}{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}{"name": "Charlie", "favorite_number": null, "favorite_color": "blue"}

至此,例子寫完。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩二区三区在线| 亚洲乱码一区av黑人高潮| 91精品国产自产在线| 国产成人高潮免费观看精品| 久久久久久免费精品| 美女啪啪无遮挡免费久久网站| 91视频-88av| 国产日产久久高清欧美一区| 亚洲欧美日韩另类| 最近的2019中文字幕免费一页| 国内精品久久久久影院 日本资源| 精品视频久久久| 91理论片午午论夜理片久久| 亚洲欧洲av一区二区| 亚洲性猛交xxxxwww| 日韩在线观看免费全| 亚洲精品美女免费| 亚洲国产成人在线播放| 中文在线资源观看视频网站免费不卡| 久久久久久国产精品久久| 欧美大全免费观看电视剧大泉洋| 97视频在线观看成人| 91av在线影院| 成人h片在线播放免费网站| 欧美电影在线观看高清| 成人天堂噜噜噜| 日本一本a高清免费不卡| xvideos亚洲人网站| 亚洲国产私拍精品国模在线观看| 国产精品精品一区二区三区午夜版| 精品国产户外野外| 久久精品视频在线| 清纯唯美亚洲激情| 亚洲少妇激情视频| 欧美激情视频在线观看| 亚洲18私人小影院| 亚洲福利视频网站| 国外成人在线播放| 欧美日韩福利视频| 欧美日韩美女在线观看| 久热精品视频在线免费观看| 欧美国产日韩免费| 欧美国产高跟鞋裸体秀xxxhd| 色综久久综合桃花网| 中文在线资源观看视频网站免费不卡| 欧美激情国内偷拍| 中文字幕久久久av一区| 91久久精品美女高潮| 欧美黑人巨大xxx极品| 日韩精品视频在线| 91亚洲精品在线| 麻豆乱码国产一区二区三区| 欧美高清视频在线观看| 亚洲国产精品电影| 亚洲国产精品中文| 亚洲欧洲一区二区三区久久| 日本精品在线视频| 九九精品视频在线| 国产精品第一区| 国产日韩av在线播放| 亚洲综合国产精品| 日韩在线观看免费全| 国产精品免费观看在线| 成人中心免费视频| 成人午夜一级二级三级| 精品电影在线观看| 国产精品综合久久久| 日本三级久久久| 国产区精品视频| 国产成人小视频在线观看| 国产v综合v亚洲欧美久久| 国产精品劲爆视频| 国产成人免费av电影| 欧美一级在线播放| 亚洲国产成人av在线| 日韩成人av在线播放| 国产精品电影久久久久电影网| 国产精品香蕉av| 精品一区二区三区四区在线| 午夜精品久久久久久99热| 国模gogo一区二区大胆私拍| 亚洲美女视频网| 国产精品欧美一区二区| 国产一区二区三区毛片| 亚洲精品福利视频| 九九热99久久久国产盗摄| 亚洲人成电影网站色xx| 亚洲欧美在线一区| 久久久精品999| 亚洲自拍偷拍网址| 日本三级韩国三级久久| 国产精品美腿一区在线看| 欧美黄色成人网| 成人精品一区二区三区电影免费| 国产精品直播网红| 国产精品一区二区久久久| 欧美最顶级丰满的aⅴ艳星| 青草青草久热精品视频在线观看| 日韩亚洲精品视频| 国产精品∨欧美精品v日韩精品| 亚洲精品v天堂中文字幕| 国产mv久久久| 久久伊人精品视频| 不卡毛片在线看| 久久久噜噜噜久久| 色偷偷888欧美精品久久久| 激情亚洲一区二区三区四区| 国产精品一区专区欧美日韩| 68精品国产免费久久久久久婷婷| 国产女人精品视频| 69久久夜色精品国产69| 日韩精品中文字幕久久臀| 91久久国产精品| 精品免费在线观看| 久久影院模特热| 久久夜色精品国产| 久久精品国产精品亚洲| 日本精品久久久| 成人欧美一区二区三区黑人孕妇| www欧美xxxx| 热久久免费国产视频| 免费97视频在线精品国自产拍| 亚洲午夜未删减在线观看| 日韩av在线导航| 亚洲第一视频网| 欧美性猛交xxxx乱大交极品| 日韩中文字在线| 国产精品久久久久9999| 欧美一级黑人aaaaaaa做受| 亚洲性夜色噜噜噜7777| 91香蕉国产在线观看| 欧美日韩中文字幕在线视频| 日韩第一页在线| 久久国产加勒比精品无码| 久久夜色精品国产欧美乱| 日韩第一页在线| 久久精品视频99| 福利一区视频在线观看| 日韩中文字幕免费| 日韩在线视频免费观看高清中文| 日韩av在线免费观看一区| 992tv成人免费视频| 国产精品一区二区久久久久| 国产精品美女www| 国内精品久久久久久久久| 欧美日韩免费区域视频在线观看| 欧美成人精品三级在线观看| 97精品国产91久久久久久| 2019亚洲日韩新视频| 一区二区成人av| 91九色国产视频| 亚洲美女在线视频| 91免费综合在线| 2019中文在线观看| 国产精品一区二区三区久久久| 久久久久久亚洲精品| 国产一区二区成人| 日韩av资源在线播放| 久久久在线免费观看| 亚洲综合成人婷婷小说| 国产免费一区二区三区香蕉精| 国产精品成人免费电影| 精品久久久在线观看| 亚洲人成在线电影|