Avro API又变了 囧 版本1.5.4
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import org.apache.avro.util.Utf8;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Hello world!
*
*/
public class App {
private static final Logger LOG = LoggerFactory.getLogger(App.class);
public static void main(String[] args) throws IOException {
LOG.info("Hello World!");
Schema schema = new Schema.Parser().parse(App.class
.getResourceAsStream("/Pair.avsc"));
GenericRecord datum = new GenericData.Record(schema);
datum.put("left", new Utf8("L"));
datum.put("right", new Utf8("R"));
String f1 = "data.1";
FileOutputStream out = new FileOutputStream(f1);
DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(
schema);
Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
// .jsonEncoder(schema, out);
writer.write(datum, encoder);
encoder.flush();
out.close();
FileInputStream in = new FileInputStream(f1);
DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(
schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(in, null);
// .jsonDecoder(schema, in);
GenericRecord r1 = reader.read(null, decoder);
LOG.info("left: {}; right: {}.", r1.get("left"), r1.get("right"));
in.close();
String f2 = "data.2";
DataFileWriter<GenericRecord> fileWriter = new DataFileWriter<GenericRecord>(
writer);
fileWriter.create(schema, new File(f2));
fileWriter.append(datum);
fileWriter.close();
DataFileReader<GenericRecord> fileReader = new DataFileReader<GenericRecord>(
new File(f2), reader);
GenericRecord r2 = null;
while (fileReader.hasNext()) {
r2 = fileReader.next(r2);
LOG.info("left: {}; right: {}.", r2.get("left"), r2.get("right"));
}
fileReader.close();
}
}
Pair.avsc
{ "type": "record", "name": "Pair", "doc": "A pair of strings.", "fields": [ {"name": "left", "type": "string"}, {"name": "right", "type": "string"} ] }
maven
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>1.5.4</version> </dependency>