由于篇幅大小控制,本篇继续借助分析avro下的package org.apache.avro的
package分析点包括generic,io,ipc,reflect,specific,tool,util
1:package generic
GenericContainer
public interface GenericContainer {
/** The schema of this instance. */
Schema getSchema();
}
子类接口GenericArray
public interface GenericArray<T> extends List<T>, GenericContainer {
T peek();
void reverse();
}
GenericFixed
public interface GenericFixed extends GenericContainer {
/** Return the data. */
byte[] bytes();
}
GenericEnumSymbol
public interface GenericEnumSymbol
extends GenericContainer, Comparable<GenericEnumSymbol> {
/** Return the symbol. */
String toString();
}
另外一个接口
IndexedRecord
public interface IndexedRecord extends GenericContainer {
void put(int i, Object v);
Object get(int i);
}
GenericRecord
public interface GenericRecord extends IndexedRecord {
void put(String key, Object v);
Object get(String key);
}
看一下GenericRecordBuilder该Builder类
public class GenericRecordBuilder extends RecordBuilderBase<Record> {}
核心方法
@Override
public Record build() {
Record record;
try {
record = new GenericData.Record(schema());
} catch (Exception e) {
throw new AvroRuntimeException(e);
}
for (Field field : fields()) {
Object value;
try {
value = getWithDefault(field);
} catch(IOException e) {
throw new AvroRuntimeException(e);
}
if (value != null) {
record.put(field.pos(), value);
}
}
return record;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((record == null) ? 0