Java序列化是指将对象转换成数据流的形式,方便其存储或者传输,便于在不同的机器和系统上进行数据交换。这个过程一般称为对象的序列化。通过Java序列化,我们可以将Java对象转换成二进制字节流,这样就可以在网络中传输对象,实现分布式系统的开发。
Java序列化的作用主要有以下三个:
1.网络传输:在网络传输过程中,常会遇到需要传输对象的情况。此时,通过Java序列化,就可以将对象转换成二进制数据流,然后传输到另一台机器上,再将数据流反序列化成对象。这样就可以轻松地在不同的机器和系统之间进行数据传输,实现分布式系统的开发。
2.数据存储:在进行面向对象的编程开发时,很多时候需要将对象持久化到文件或数据库中,此时通过Java序列化,可以将对象转换成二进制字节流,然后存储到文件或数据库中,便于对象的读取和存储。
3.克隆对象:对象克隆是指创建一个新的对象,该对象的值与原对象相同。通过Java序列化,可以实现对象的深拷贝,从而克隆出一个新的对象,这样就可以防止对象引用的浅拷贝造成的对象修改的多次引用问题。
下面是两个序列化的示例:
示例一:
import java.io.*;
public class TestSerialize implements Serializable
{
public static void main(String[] args) throws Exception
{
TestSerialize test = new TestSerialize();
test.write();
test.read();
}
public void write() throws Exception
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.txt"));
oos.writeObject(this);
System.out.println("序列化成功");
oos.close();
}
public void read() throws Exception
{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt"));
TestSerialize test = (TestSerialize)ois.readObject();
System.out.println("反序列化成功");
ois.close();
}
}
示例二:
import java.io.*;
/**
* 用户类
*/
class User implements Serializable
{
private String name;
private String password;
public User(String name, String password)
{
this.name = name;
this.password = password;
}
@Override
public String toString()
{
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
public class TestSerialize2
{
public static void main(String[] args) throws Exception
{
User user1 = new User("张三","123456");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.txt"));
oos.writeObject(user1);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.txt"));
User user2 = (User)ois.readObject();
System.out.println("原对象:"+user1);
System.out.println("克隆对象:"+user2);
ois.close();
}
}
以上是Java序列化的基本介绍及例子,让我们可以更好地理解Java序列化的作用及用法。