w747770454 2017-08-07 02:38 采纳率: 40%
浏览 1280
已采纳

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

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

  • 写回答

2条回答 默认 最新

  • w747770454 2017-08-10 02:22
    关注

    已经找到解决办法。还是因为对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("")方法就可以获得指定内容。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退