以下是在avro中进行序列化的代码(摘自apache avro网站-https://avro.apache.org/docs/1.7.7/gettingstartedjava.html):
File file = new File("users.avro");
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.create(schema, file); <==== Note1
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.close();
反序列化的代码:
DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(schema); <==== Note2
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(file, datumReader);
GenericRecord user = null;
while (dataFileReader.hasNext()) {
user = dataFileReader.next(user);
}
由于模式作为标头(Note1)存储在文件中,是否有办法首先从文件中检索它并将其传递给GenericDatumReader(),而不是先验(Note2)?
谢谢你, 艾哈迈德。