與protobuf類似,適用Thrift之前,需要編寫以.thrift結尾的IDL文件,再適用Thrift提供的編譯器生成對應的代碼。對java而言,所生成的java bean都集成了類org.apache.thrift.TBase。
代碼如下:
package ares.remoting.framework.serialization.serializer.impl;
import ares.remoting.framework.serialization.serializer.ISerializer;
import org.apache.thrift.TBase;
import org.apache.thrift.TDeserializer;
import org.apache.thrift.TException;
import org.apache.thrift.TSerializer;
import org.apache.thrift.protocol.TBinaryProtocol;
/**
* @author fuss created on 18/7/23.
* @version $Id$
*/
public class ThriftSerializer implements ISerializer {
public <T> byte[] serialize(T obj) {
try {
TSerializer serializer = new TSerializer(new TBinaryProtocol.Factory());
return serializer.serialize((TBase) obj);
} catch (TException e) {
throw new RuntimeException(e);
}
}
public <T> T deserialize(byte[] data, Class<T> clazz) {
try {
TBase o = (TBase) clazz.newInstance();
TDeserializer tDeserializer = new TDeserializer();
tDeserializer.deserialize(o, data);
return (T) o;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
maven依賴配置,代碼如下:
<!-- thrift -->
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libfb303</artifactId>
<version>0.9.3</version>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.3</version>
</dependency>