Java:对象序列化应用说明

对象序列化方便用于传输与储存

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();
	}
	
			
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值