avro java_avro序列化框架实践(一)根据schema文件反向生成java类

本文介绍了Avro序列化框架的使用,通过一个示例展示了如何利用schema文件`user.avsc`生成Java类`User`。Avro提供了一种方式将对象序列化和反序列化,方便数据交换。文章详细展示了生成的`User`类的代码,并解释了其主要方法和属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原标题:avro序列化框架实践(一)根据schema文件反向生成java类

avro是一款序列化框架,定义schema文件,可以生成java类,然后配合就可以序列化、反序列化对象。

定义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"]}

]

}

执行命令

java -jar avro-tools-1.8.2.jar compile schema user.avsc .

产生的User类

exampleavroUser.java

/**

* Autogenerated by Avro

*

* DO NOT EDIT DIRECTLY

*/

package example.avro;

import org.apache.avro.specific.SpecificData;

import org.apache.avro.message.BinaryMessageEncoder;

import org.apache.avro.message.BinaryMessageDecoder;

import org.apache.avro.message.SchemaStore;

@SuppressWarnings("all")

@org.apache.avro.specific.AvroGenerated

public class User extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {

private static final long serialVersionUID = -3588479540582100558L;

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$; }

private static SpecificData MODEL$ = new SpecificData();

private static final BinaryMessageEncoder ENCODER =

new BinaryMessageEncoder(MODEL$, SCHEMA$);

private static final BinaryMessageDecoder DECODER =

new BinaryMessageDecoder(MODEL$, SCHEMA$);

/**

* Return the BinaryMessageDecoder instance used by this class.

*/

public static BinaryMessageDecoder getDecoder() {

return DECODER;

}

/**

* Create a new BinaryMessageDecoder instance for this class that uses the specified {@link SchemaStore}.

* @param resolver a {@link SchemaStore} used to find schemas by fingerprint

*/

public static BinaryMessageDecoder createDecoder(SchemaStore resolver) {

return new BinaryMessageDecoder(MODEL$, SCHEMA$, resolver);

}

/** Serializes this User to a ByteBuffer. */

public java.nio.ByteBuffer toByteBuffer() throws java.io.IOException {

return ENCODER.encode(this);

}

/** Deserializes a User from a ByteBuffer. */

public static User fromByteBuffer(

java.nio.ByteBuffer b) throws java.io.IOException {

return DECODER.decode(b);

}

@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 newBuilder().

*/

public User() {}

/**

* All-args constructor.

* @param name The new value for name

* @param favorite_number The new value for favorite_number

* @param favorite_color The new value for favorite_color

*/

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.

* @return 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.

* @return 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.

* @return 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.

* @return 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.

* @param other The existing builder to copy.

* @return A new User RecordBuilder

*/

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.

* @param other The existing instance to copy.

* @return A new User RecordBuilder

*/

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

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(SCHEMA$);

}

/**

* Creates a Builder by copying an existing Builder.

* @param other The existing Builder to copy.

*/

private Builder(example.avro.User.Builder other) {

super(other);

if (isValidValue(fields()[0], other.name)) {

this.name = data().deepCopy(fields()[0].schema(), other.name);

}

if (isValidValue(fields()[1], other.favorite_number)) {

this.favorite_number = data().deepCopy(fields()[1].schema(), other.favorite_number);

}

if (isValidValue(fields()[2], other.favorite_color)) {

this.favorite_color = data().deepCopy(fields()[2].schema(), other.favorite_color);

}

}

/**

* Creates a Builder by copying an existing User instance

* @param other The existing instance to copy.

*/

private Builder(example.avro.User other) {

super(SCHEMA$);

if (isValidValue(fields()[0], other.name)) {

this.name = data().deepCopy(fields()[0].schema(), other.name);

}

if (isValidValue(fields()[1], other.favorite_number)) {

this.favorite_number = data().deepCopy(fields()[1].schema(), other.favorite_number);

}

if (isValidValue(fields()[2], other.favorite_color)) {

this.favorite_color = data().deepCopy(fields()[2].schema(), other.favorite_color);

}

}

/**

* Gets the value of the 'name' field.

* @return The value.

*/

public java.lang.CharSequence getName() {

return name;

}

/**

* Sets the value of the 'name' field.

* @param value The value of 'name'.

* @return This builder.

*/

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.

* @return True if the 'name' field has been set, false otherwise.

*/

public boolean hasName() {

return fieldSetFlags()[0];

}

/**

* Clears the value of the 'name' field.

* @return This builder.

*/

public example.avro.User.Builder clearName() {

name = null;

fieldSetFlags()[0] = false;

return this;

}

/**

* Gets the value of the 'favorite_number' field.

* @return The value.

*/

public java.lang.Integer getFavoriteNumber() {

return favorite_number;

}

/**

* Sets the value of the 'favorite_number' field.

* @param value The value of 'favorite_number'.

* @return This builder.

*/

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.

* @return True if the 'favorite_number' field has been set, false otherwise.

*/

public boolean hasFavoriteNumber() {

return fieldSetFlags()[1];

}

/**

* Clears the value of the 'favorite_number' field.

* @return This builder.

*/

public example.avro.User.Builder clearFavoriteNumber() {

favorite_number = null;

fieldSetFlags()[1] = false;

return this;

}

/**

* Gets the value of the 'favorite_color' field.

* @return The value.

*/

public java.lang.CharSequence getFavoriteColor() {

return favorite_color;

}

/**

* Sets the value of the 'favorite_color' field.

* @param value The value of 'favorite_color'.

* @return This builder.

*/

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

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

this.favorite_color = value;

return this;

}

/**

* Checks whether the 'favorite_color' field has been set.

* @return True if the 'favorite_color' field has been set, false otherwise.

*/

public boolean hasFavoriteColor() {

return fieldSetFlags()[2];

}

/**

* Clears the value of the 'favorite_color' field.

* @return This builder.

*/

public example.avro.User.Builder clearFavoriteColor() {

favorite_color = null;

fieldSetFlags()[2] = false;

return this;

}

@Override

@SuppressWarnings("unchecked")

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 (java.lang.Exception e) {

throw new org.apache.avro.AvroRuntimeException(e);

}

}

}

@SuppressWarnings("unchecked")

private static final org.apache.avro.io.DatumWriter

WRITER$ = (org.apache.avro.io.DatumWriter)MODEL$.createDatumWriter(SCHEMA$);

@Override public void writeExternal(java.io.ObjectOutput out)

throws java.io.IOException {

WRITER$.write(this, SpecificData.getEncoder(out));

}

@SuppressWarnings("unchecked")

private static final org.apache.avro.io.DatumReader

READER$ = (org.apache.avro.io.DatumReader)MODEL$.createDatumReader(SCHEMA$);

@Override public void readExternal(java.io.ObjectInput in)

throws java.io.IOException {

READER$.read(this, SpecificData.getDecoder(in));

}

}

---------------------

作者:pangPython

来源:CSDN

原文:https://blog.csdn.net/u012995856/article/details/84112338

版权声明:本文为博主原创文章,转载请附上博文链接!返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值