-
Notifications
You must be signed in to change notification settings - Fork 403
/
HessianSerializer.java
67 lines (60 loc) · 1.45 KB
/
HessianSerializer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.xxl.rpc.core.serialize.impl;
import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;
import com.xxl.rpc.core.serialize.Serializer;
import com.xxl.rpc.core.util.XxlRpcException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* hessian serialize
* @author xuxueli 2015-9-26 02:53:29
*/
public class HessianSerializer extends Serializer {
@Override
public <T> byte[] serialize(T obj){
ByteArrayOutputStream os = new ByteArrayOutputStream();
Hessian2Output ho = new Hessian2Output(os);
try {
ho.writeObject(obj);
ho.flush();
byte[] result = os.toByteArray();
return result;
} catch (IOException e) {
throw new XxlRpcException(e);
} finally {
try {
ho.close();
} catch (IOException e) {
throw new XxlRpcException(e);
}
try {
os.close();
} catch (IOException e) {
throw new XxlRpcException(e);
}
}
}
@Override
public <T> Object deserialize(byte[] bytes, Class<T> clazz) {
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
Hessian2Input hi = new Hessian2Input(is);
try {
Object result = hi.readObject();
return result;
} catch (IOException e) {
throw new XxlRpcException(e);
} finally {
try {
hi.close();
} catch (Exception e) {
throw new XxlRpcException(e);
}
try {
is.close();
} catch (IOException e) {
throw new XxlRpcException(e);
}
}
}
}