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

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);      }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容