提交 17752e7a 编写于 作者: 武汉红喜's avatar 武汉红喜

lightrpc-serialization

上级 5726f205
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>lightrpc</artifactId>
<groupId>org.hongxi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>lightrpc-serialization</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.hongxi.lightrpc.codec;
import java.io.IOException;
/**
* Created by shenhongxi on 2018/10/7.
*/
public interface Serialization {
byte[] serialize(Object obj) throws IOException;
<T> T deserialize(byte[] bytes, Class<T> clz) throws IOException;
byte[] serializeMulti(Object[] data) throws IOException;
Object[] deserializeMulti(byte[] data, Class<?>[] classes) throws IOException;
/**
* serializaion的唯一编号,用于传输协议中指定序列化方式。每种序列化的编号必须唯一。
* @return 由于编码规范限制,序列化方式最大支持32种,因此返回值必须在0-31之间。
*/
int getSerializationNumber();
}
package org.hongxi.lightrpc.serialization;
import org.hongxi.lightrpc.codec.Serialization;
import java.io.IOException;
/**
* Created by shenhongxi on 2018/10/7.
*/
public class DeserializableObject {
private Serialization serialization;
private byte[] objBytes;
public DeserializableObject(Serialization serialization, byte[] objBytes) {
this.serialization = serialization;
this.objBytes = objBytes;
}
public <T> T deserialize(Class<T> clz) throws IOException {
return serialization.deserialize(objBytes, clz);
}
public Object[] deserializeMulti(Class<?>[] paramTypes) throws IOException {
Object[] ret = null;
if (paramTypes != null && paramTypes.length > 0) {
ret = serialization.deserializeMulti(objBytes, paramTypes);
}
return ret;
}
}
package org.hongxi.lightrpc.serialization;
import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;
import org.hongxi.lightrpc.codec.Serialization;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* Created by shenhongxi on 2018/10/7.
*/
public class Hessian2Serialization implements Serialization {
@Override
public byte[] serialize(Object data) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Hessian2Output out = new Hessian2Output(bos);
out.writeObject(data);
out.flush();
return bos.toByteArray();
}
@SuppressWarnings("unchecked")
@Override
public <T> T deserialize(byte[] data, Class<T> clz) throws IOException {
Hessian2Input input = new Hessian2Input(new ByteArrayInputStream(data));
return (T) input.readObject(clz);
}
@Override
public byte[] serializeMulti(Object[] data) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Hessian2Output out = new Hessian2Output(bos);
for(Object obj: data){
out.writeObject(obj);
}
out.flush();
return bos.toByteArray();
}
@Override
public Object[] deserializeMulti(byte[] data, Class<?>[] classes) throws IOException {
Hessian2Input input = new Hessian2Input(new ByteArrayInputStream(data));
Object[] objects = new Object[classes.length];
for (int i = 0; i < classes.length; i++) {
objects[i] = input.readObject(classes[i]);
}
return objects;
}
@Override
public int getSerializationNumber() {
return 0;
}
}
......@@ -15,6 +15,7 @@
<modules>
<module>lightrpc-rpc</module>
<module>lightrpc-remoting</module>
<module>lightrpc-serialization</module>
</modules>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册