美文网首页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对象序列化处理

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