美文网首页Avro
Avro 对象序列化与反序列化,及转Json对象序列化处理

Avro 对象序列化与反序列化,及转Json对象序列化处理

作者: 达微 | 来源:发表于2018-06-01 14:54 被阅读66次

Avro 工具类 序列化与反序列化

public class AvroHelper {

public  byte[]serializeAvroToByteArray(List dcs) {

try {

ByteArrayOutputStream baos =new ByteArrayOutputStream();

            DatumWriter pictureDatumWriter =new SpecificDatumWriter();

            DataFileWriter dataFileWriter =new DataFileWriter(pictureDatumWriter);

            dataFileWriter.create(dcs.get(0).getSchema(), baos);

            for (T dc : dcs) {

dataFileWriter.append(dc);

            }

dataFileWriter.close();

            return baos.toByteArray();

        }catch (IOException e) {

e.printStackTrace();

        }

return null;

    }

public  byte[]serialize(T dc) {

try {

ByteArrayOutputStream baos =new ByteArrayOutputStream();

            DatumWriter pictureDatumWriter =new SpecificDatumWriter();

            DataFileWriter dataFileWriter =new DataFileWriter(pictureDatumWriter);

            dataFileWriter.create(dc.getSchema(), baos);

            dataFileWriter.append(dc);

            dataFileWriter.close();

            return baos.toByteArray();

        }catch (IOException e) {

e.printStackTrace();

        }

return null;

    }

public  ListdeserialzeAvroFromByteArray(Class cls,byte[] dcsByteArray) {

try {

SeekableByteArrayInput sbai =new SeekableByteArrayInput(dcsByteArray);

            DatumReader dcDatumReader =new SpecificDatumReader(cls);

            DataFileReader dataFileReader =new DataFileReader(sbai, dcDatumReader);

            List list = Lists.newArrayList();

            while (dataFileReader.hasNext()) {

T pic =null;

                pic = dataFileReader.next(pic);

                list.add(pic);

            }

return list;

        }catch (IOException e) {

e.printStackTrace();

        }

return null;

    }

public T deserialize(Class cls, byte[] data) {

try {

SeekableByteArrayInput sbai =new SeekableByteArrayInput(data);

            DatumReader dcDatumReader =new SpecificDatumReader<>(cls);

            DataFileReader dataFileReader =new DataFileReader(sbai, dcDatumReader);

            if (dataFileReader.hasNext()) {

T pic =null;

                pic = dataFileReader.next(pic);

                return pic;

            }

return null;

        }catch (IOException e) {

e.printStackTrace();

        }

return null;

    }

public String toJSON(Object obj) {

String json =null;

    Gson gson =new GsonBuilder()

.registerTypeAdapter(Utf8.class, new Utf8Adapter())

.create();

    json= gson.toJson(obj);

    return json;

}

public T  toObj(String json,Class cls) {

Gson gson =new GsonBuilder()

.registerTypeAdapter(Utf8.class, new Utf8Adapter())

.create();

        return gson.fromJson(json, (Class) cls);

}

}

package com.vacp.common;

import com.google.gson.*;

import org.apache.avro.util.Utf8;

import java.lang.reflect.Type;

public class Utf8Adapterimplements JsonSerializer, JsonDeserializer {

@Override

    public Utf8deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext)throws JsonParseException {

if(jsonElement ==null){

return null;

        }else {

try {

return new Utf8(jsonElement.toString());

            }catch (Exception e) {

return null;

            }

}

}

@Override

    public JsonElementserialize(Utf8 vehicle, Type type, JsonSerializationContext jsonSerializationContext) {

String value ="";

        if(value!=null){

try {

value = vehicle.toString();

            }catch (Exception e){

e.printStackTrace();

            }

}

return new JsonPrimitive(value);      }

}

相关文章

  • Avro JSON 序列化

    摘要 Schema究竟是什么,Avro和JSON的关系,Avro的序列化与反序列化,对象容器文件。 Schema究...

  • Django 学习笔记

    [TOC] 学习路径 1. 序列化 对象处理 实例序列化 转json 2. 反序列化 恢复对象实例 (可选)序列化...

  • Android安卓开发 Gson使用教程

    Gson的序列化 多个对象转json Gson的反序列化,json转对象 对于数组类可以直接转。但对于集合类就必...

  • Avro 对象序列化与反序列化,及转Json对象序列化处理

    Avro 工具类 序列化与反序列化 public class AvroHelper { public byte[]...

  • iOS JSON 数据解析

    (1)JSON数据->OC对象(反序列化) (2)OC对象->JSON对象(序列化) (3)OC对象和JSON数据...

  • 序列化,序列化高级

    序列化 序列化:把对象(Dict)转成可传输数据(JSON) 反序列化:把传输数据(json)转成对象(Dict)...

  • 关于json序列化

    关于json序列化(javaBean转Json的细节处理) json序列化(javaBean转Json的细节) J...

  • python序列化与反序列化

    json序列化与反序列化 序列化:dumps()/dump(),将python中字典类型的对象序列化后,转化成js...

  • DRF之序列化

    序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象。 序列化两大...

  • FastJson的基本使用实践

    序列化一个对象成为JSON字符串 反序列化一个JSON字符串成为一个对象 数组序列化成为JSON字符串 JSON字...

网友评论

    本文标题:Avro 对象序列化与反序列化,及转Json对象序列化处理

    本文链接:https://www.haomeiwen.com/subject/btqksftx.html