欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2024/7/23 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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);      }

}

总结

以上是生活随笔为你收集整理的avro 序列化java_Avro 对象序列化与反序列化,及转Json对象序列化处理的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。