avro 序列化java_avro序列化框架实践(三)通过实体类进行序列化与反序列化

原标题:avro序列化框架实践(三)通过实体类进行序列化与反序列化

# avro序列化框架实践(三)通过实体类进行序列化与反序列化

User.java 可以由schema文件生成,也可以自己定义

```

/**

* Autogenerated by Avro

*

* DO NOT EDIT DIRECTLY

*/

package example.avro;

@SuppressWarnings("all")

@org.apache.avro.specific.AvroGenerated

public 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 {@link #newBuilder()}.

*/

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$) {

case 0: return name;

case 1: return favorite_number;

case 2: return favorite_color;

}

}

// Used by DatumReader. Applications should not call.

@SuppressWarnings(value="unchecked")

public void put(int field$, java.lang.Object value$) {

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;

}

}

/**

*/

return name;

}

/**

* @param value the value to set.

*/

public void setName(java.lang.CharSequence value) {

this.name = value;

}

/**

*/

return favorite_number;

}

/**

* @param value the value to set.

*/

public void setFavoriteNumber(java.lang.Integer value) {

this.favorite_number = value;

}

/**

*/

}

/**

* @param value the value to set.

*/

public void setFavoriteColor(java.lang.CharSequence 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) {

}

/** Creates a new User RecordBuilder by copying an existing User instance */

public static example.avro.User.Builder newBuilder(example.avro.User other) {

}

/**

* RecordBuilder for User instances.

*/

public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase

implements org.apache.avro.data.RecordBuilder {

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

}

}

}

}

/** Creates a Builder by copying an existing User instance */

private Builder(example.avro.User other) {

super(example.avro.User.SCHEMA$);

}

}

}

}

/** Gets the value of the 'name' field */

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;

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 */

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;

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 */

}

/** Sets the value of the 'favorite_color' field */

public example.avro.User.Builder setFavoriteColor(java.lang.CharSequence value) {

validate(fields()[2], value);

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

}

}

}

}

```

## 把User对象序列化到磁盘users.avro

```

User user1 = new User();

user1.setName("Alyssa");

user1.setFavoriteNumber(256);

// Leave favorite color null

// Alternate constructor

User user2 = new User("Ben", 7, "red");

// Construct via builder

User user3 = User.newBuilder()

.setName("Charlie")

.setFavoriteColor("blue")

.setFavoriteNumber(null)

.build();

// Serialize user1 and user2 to disk

DatumWriter userDatumWriter = new SpecificDatumWriter(User.class);

DataFileWriter dataFileWriter = new DataFileWriter(userDatumWriter);

dataFileWriter.create(user1.getSchema(), file);

dataFileWriter.append(user3);

```

## 把users.avro反序列化成对象

```

// Deserialize Users from disk

DatumReader userDatumReader = new SpecificDatumReader(User.class);

DataFileReader dataFileReader = new DataFileReader(file, userDatumReader);

User user = null;

// allocating and garbage collecting many objects for files with

// many items.

}

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值