avro 序列化java_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);      }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值