Java默认序列化技术
主要是通过
-
对象输出流java.io.ObjectOutputStream
-
对象输入流java.io.ObjectInputStream
来实现的
1
2
3
4
5
6
7
8
9
|
package
com.xingej.ser;
public
interface
ISerializer {
// 序列化,将obj序列化成字节数组
public
<T>
byte
[] serialize(T obj);
// 反序列化,将字节数组,反序列化为T
public
<T> T deserialize(
byte
[] data, Class<T> clazz);
}
|
实现类:
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
|
package
com.xingej.ser.impl;
import
java.io.ByteArrayInputStream;
import
java.io.ByteArrayOutputStream;
import
java.io.IOException;
import
java.io.ObjectInputStream;
import
java.io.ObjectOutputStream;
import
com.xingej.ser.ISerializer;
public
class
DefaultJavaSerializer
implements
ISerializer {
public
<T>
byte
[] serialize(T obj) {
// 默认创建的是32个字节
ByteArrayOutputStream bos =
new
ByteArrayOutputStream();
ObjectOutputStream oos =
null
;
try
{
// 对字节输出流进行封装
oos =
new
ObjectOutputStream(bos);
// 通过writeObject,将obj对象进行序列化到了bos里
oos.writeObject(obj);
}
catch
(IOException e) {
e.printStackTrace();
}
return
bos.toByteArray();
}
@SuppressWarnings
(
"unchecked"
)
public
<T> T deserialize(
byte
[] data, Class<T> clazz) {
// 将字节数组,转换成输入流
ByteArrayInputStream bis =
new
ByteArrayInputStream(data);
ObjectInputStream ois =
null
;
Object object =
null
;
try
{
// 将字节输入流 转换成 对象输入流
ois =
new
ObjectInputStream(bis);
// 这样的话,就可以通过ObjectInputStream的readObject方法
// 直接读取对象了
object = ois.readObject();
}
catch
(Exception e) {
e.printStackTrace();
}
return
(T) object;
}
}
|
进行测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package
com.xingej.ser.client;
import
com.xingej.ser.ISerializer;
import
com.xingej.ser.impl.DefaultJavaSerializer;
/**
* 对java默认序列化进行测试
*
*/
public
class
Driver {
public
static
void
main(String[] args) {
String name =
"spark"
;
ISerializer serializer =
new
DefaultJavaSerializer();
// 序列化
byte
[] nameSer = serializer.serialize(name);
// 反序列
Object object = serializer.deserialize(nameSer, String.
class
);
System.out.println(
"---序列化--->:\t"
+ object);
}
}
|
本文转自故新51CTO博客,原文链接: http://blog.51cto.com/xingej/1959729,如需转载请自行联系原作者