java avro序列化_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
    评论
Avro JSON序列化是一种将数据使用AVRO模式序列化JSON格式的程序。它可以将数据对象换为JSON字符串,以便于传输、存储或其他处理。通过使用AVRO模式,数据对象的结构和类型信息可以保留在序列化过程中,这样在反序列化时可以方便地还原数据对象的结构和类型。Avro JSON序列化可以确保数据的完整性和一致性,并提供了一种有效的方式来验证数据与预定义的模式是否匹配。因此,使用Avro JSON序列化可以更好地管理和处理数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python-avro-json-serializer, 使用AVRO模式将数据序列化JSON格式.zip](https://download.csdn.net/download/weixin_38743968/11769308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Avro 对象序列化反序列化,及Json对象序列化处理](https://blog.csdn.net/weixin_28839629/article/details/114686831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值