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