JBoss Marshalling是一個Java對象序列化包,兼容Java原生的序列化機制,對Java原生序列化機制做了優化,使其在性能上有很大提升。在保持跟java.io.Serializable接口兼容的同時增加了一些可調的參數和附加特性,這些參數和附加特性,可通過工廠類進行配置,對原生Java序列化是一個很好的替代。
代碼如下:
package ares.remoting.framework.serialization.serializer.impl;
import ares.remoting.framework.serialization.serializer.ISerializer;
import org.jboss.marshalling.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* @author fuss created on 18/7/23.
* @version $Id$
*/
public class MarshallingSerializer implements ISerializer {
final static MarshallingConfiguration configuration = new MarshallingConfiguration();
//獲取序列化工廠對象,參數serial標識創建的是java序列化工廠對象
final static MarshallerFactory marshallerFactory = Marshalling.getProvidedMarshallerFactory("serial");
static {
configuration.setVersion(5);
}
public byte[] serialize(Object obj) {
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
final Marshaller marshaller = marshallerFactory.createMarshaller(configuration);
marshaller.start(Marshalling.createByteOutput(byteArrayOutputStream));
marshaller.writeObject(obj);
marshaller.finish();
} catch (IOException e) {
e.printStackTrace();
}
return byteArrayOutputStream.toByteArray();
}
public <T> T deserialize(byte[] data, Class<T> clazz) {
try {
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
final Unmarshaller unmarshaller = marshallerFactory.createUnmarshaller(configuration);
unmarshaller.start(Marshalling.createByteInput(byteArrayInputStream));
Object object = unmarshaller.readObject();
unmarshaller.finish();
return (T) object;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
maven 依賴配置如下:
<!-- marshalling -->
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling-serial</artifactId>
<version>2.0.0.Beta2</version>
</dependency>