说明
我的情况可能是原因里面的一种,本文为老铁们提供参考使用
原因
我之前的代码是没有getResourceAsStream这一部分,后面加上以后就一直返回null。
后来我执行了 mvn clean
后就生效了
代码
import org.apache.avro.Schema;
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.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class BaseDemon {
public static void main(String[] args) throws IOException {
Schema.Parser parser = new Schema.Parser();
// 这里是 getResourceAsStream
Schema schema = parser.parse(BaseDemon.class.getResourceAsStream("avro/StringPair.avsc"));
// 输入
GenericRecord genericRecord = new GenericData.Record(schema);
genericRecord.put("left", "L");
genericRecord.put("right", "R");
ByteArrayOutputStream out = new ByteArrayOutputStream();
DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);
Encoder encode = EncoderFactory.get().binaryEncoder(out, null);
writer.write(genericRecord, encode);
encode.flush();
out.close();
// 输出
DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(out.toByteArray(), null);
GenericRecord result = reader.read(null, decoder);
System.out.println(result.get("left"));
System.out.println(result.get("right"));
}
}