给定GenericRecord,与Object相反,检索类型值的推荐方法是什么?我们是否期望投射这些值,如果是这样,从Avro类型到Java类型的映射是什么?例如,Avro Array == Java Collection ; 和Avro String == Java Utf8.
由于每个GenericRecord都包含其架构,我希望有一种类型安全的方法来检索值.
阿夫罗具有八个基本类型和5种复杂类型(不包括工会作为其它类型的组合).下表13种这些阿夫罗类型映射到它们的输入接口(在Java类型可以是put
成GenericRecord
)和它们的输出实现(其通过返回的具体Java类型get
从一个GenericRecord
).这些值适用于Avro 1.7.7.
??????????????????????????????????????????????????????????????????
? Avro Type ? Input Interface ? Output Implementation ?
??????????????????????????????????????????????????????????????????
? null ? ? null ?
? boolean ? java.lang.Boolean ? java.lang.Boolean ?
? int ? java.lang.Integer ? java.lang.Integer ?
? long ? java.lang.Long ? java.lang.Long ?
? float ? java.lang.Float ? java.lang.Float ?
? double ? java.lang.Double ? java.lang.Double ?
? bytes ? java.nio.ByteBuffer ? java.nio.HeapByteBuffer ?
? string ? java.lang.CharSequence ? org.apache.avro.util.Utf8 ?
? record ? *.GenericRecord ? *.GenericData$Record ?
? enum ? java.lang.CharSequence ? *.GenericData$EnumSymbol ?
? array ? java.util.Collection ? *.GenericData$Array ?
? map ? java.util.Map ? java.util.HashMap ?
? fixed ? *.GenericFixed ? *.GenericData$Fixed ?
??????????????????????????????????????????????????????????????????
* == org.apache.avro.generic
在Avro 1.8.0中,enum
类型需要 a GenericEnumSymbol
.它不再接受CharSequence
.