高分悬赏 apache avro数据 C与Java通信 序列化问题

最近需要配合C做一些数据解析工作。使用AVRO封装数据。由于C支持的PRC还不完整 没有采用这种方式。而是以流的方式通过HTTP 由C发送给Java解析并存储下来。双方定义相同的schema.目前遇到一个问题。
avro-c 库函数序列化发送的数据没有schema。只包含如图所示的序列化数据图片说明
而Java解析和输出的数据内容均包含scheam 信息和数据信息。尝试过使用内容拼接来解析。但是解析失败了。请问大家 此类问题应该怎样解决

2个回答

已经找到解决办法。还是因为对API不熟造成的。avro 有方法能够解析无scheam的文件。前提是在类方法中指定一个scheam进行解析。
大致方法如下。
public static List getGenricRecordList(InputStream fin){

    List<GenericRecord> grList = new ArrayList<GenericRecord>();
    /**   不指定类型 指定schema加载数据**/
    DatumReader<GenericRecord> reader=new GenericDatumReader<GenericRecord>(SCHEMA$);  
    Decoder decoder=DecoderFactory.get().binaryDecoder(fin,null); 

    while(true){


        try{

         GenericRecord result=reader.read(null,decoder);
        grList.add(result);

        }catch(Exception e){

            break;
        }

    }

    return grList;
}

由于avro还未完全成熟,读文件到最后会抛出EOF异常。此时就是读到文件末尾了。每一个GenericRecord 是一行数据。使用实例result.get("")方法就可以获得指定内容。

补充一点 Java与C 的通信会存在字节序问题。要写好工具类。数据发送方转换好数据之后再进行发送。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!