Avro

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

2018-06-01  本文已影响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);      }

}

上一篇 下一篇

猜你喜欢

热点阅读