Avro:ReflectDatumWriter不输出架构信息

时间:2017-05-04 13:31:15

标签: java avro

请参阅以下示例代码:

$(function () {
    $("#TheForm").submit(function (e) {
    var status = this.value;
    e.preventDefault();
    $.ajax({
    type: "Post",
    url: '@("/fetch/getadvancedsearch")',
    dataType: "json",
    data: JSON.stringify($("#TheForm").serializeArray()),
    contentType: "application/json; charset=utf-8",
    success: .... 

产生:

        User datum = new User("a123456", "my.email@world.com");
        Schema schema = ReflectData.get().getSchema(datum.getClass());
        DatumWriter<Object> writer = new ReflectDatumWriter<>(schema);
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        Encoder encoder = EncoderFactory.get().binaryEncoder(output, null);
        writer.write(datum, encoder);
        encoder.flush();
        byte[] bytes = output.toByteArray();
        System.out.println(new String(bytes));

我曾假设所有Avro编写者都会发布架构信息以及数据,但事实并非如此。

如果我将a123456$my.email@world.com GenericDatumWriter结合使用,我可以成功打印架构,但我希望使用DataFileWriter因为我不想构建ReflectDatumWriter我自己(我希望图书馆这样做)

如何将模式序列化?

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题,你需要使用chromedriver.exe,因为它包含了写入模式的create()方法中的一个条目

解决方案是将其与DataFileWriter

结合使用
ByteArrayOutputStream