对象序列化方便用于传输与储存
package serializable;
//方法一:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Point implements Serializable{
private static final long serialVersionUID = 3592533161892131368L;
int x;
@Override
public String toString() {
return "Point [x=" + x + "]";
}
}
public class TestSerializable {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
//1.创建对象
Point p1 = new Point();
p1.x = 10;
//2.对象序列化
ObjectOutputStream out =
new ObjectOutputStream(
new FileOutputStream("s1.txt"));
out.writeObject(p1);
//3.反序列化
ObjectInputStream in =
new ObjectInputStream(
new FileInputStream("s1.txt"));
Point readObject = (Point) in.readObject();
System.out.println(readObject); //1.反序列化为对象
}
}
//方法二
package serializable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
class User implements Serializable{
private String username;
private transient String phone; //当少量属性时,可以使用transient来修饰不可修饰化的对象
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
//加密序列化
private void writeObject(ObjectOutputStream out) throws Exception{
//模拟序列化
Encoder en = Base64.getEncoder();
byte[] usernameBytes = username.getBytes(); //加密参数必须是字节码,只能通过此方法进行转换操作
byte[] phoneBytes = phone.getBytes();
this.username = en.encodeToString(usernameBytes);//成功加密后,需将加密的数值赋值给对象
this.phone = en.encodeToString(phoneBytes);
//this.username = this.username.toUpperCase();
//序列化
out.defaultWriteObject();
}
//解密反序列化
private void readObject(ObjectInputStream in) throws Exception{
//反序列化
in.defaultReadObject();
//序列化
//this.username = this.username.toLowerCase();
Decoder de = Base64.getDecoder();//获取解码器
String deString = new String(de.decode(username)); //解码成字符串
this.username = deString; //赋值给username
}
@Override
public String toString() {
return "User [username=" + username + ", phone=" + phone + "]";
}
}
public class TestSerializable02 {
public static void main(String[] args) throws Exception {
//创建对象
User user = new User();
user.setUsername("admin");
user.setPhone("123456789");
//2.对象序列化
ObjectOutputStream out = new
ObjectOutputStream(
new FileOutputStream("user01.txt"));
out.writeObject(user);
out.close();
//3.对象反序列化
ObjectInputStream in = new
ObjectInputStream(
new FileInputStream("user01.txt"));
User readUser = (User)in.readObject();
System.out.println(readUser);
in.close();
}
}
//方法三:
package serializable;
import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
class Employee implements Externalizable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Employee() {
super();
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + "]";
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(id);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
this.id = in.readInt();
}
}
public class TestSerializable03 {
//创建对象
public static void main(String[] args) throws Exception {
Employee e = new Employee();
e.setId(100);
e.setName("fire man");
//2.对象序列化
ObjectOutputStream out = new
ObjectOutputStream(
new FileOutputStream("emp01.txt"));
out.writeObject(e);
out.close();
//3.对象反序列化
ObjectInputStream in = new
ObjectInputStream(
new FileInputStream("emp01.txt"));
Employee readUser = (Employee)in.readObject();
System.out.println(readUser);
in.close();
}
}