JAVA------序列化和反序列化

2024-01-08 18:42:27

序列化和反序列化

在这里插入图片描述
写对象ObjectOutputStream
字节

public static void main(String[] args) throws IOException, ClassNotFoundException {
		FileOutputStream o = new FileOutputStream("D:\\B站\\Person.txt");
		ObjectOutputStream obO = new ObjectOutputStream(o);
		Person p = new Person("ad",22);
		obO.writeObject(p);
		obO.close();
		
		FileInputStream i = new FileInputStream("D:\\B站\\Person.txt");
		ObjectInputStream ibI = new ObjectInputStream(i);
		Object readObject = ibI.readObject();
		System.out.println(readObject);
		ibI.close();
	}
public class Person implements Serializable{
	private static final long In = 214342L;
	private String name;
	private int age;//注意:当加上static会出现序列化和反序列化后值为0.但,当我们去实例化对象,打印age值却不会出现值为0的情况。总结:static不能序列化
	//理由:序列化是对象的,静态不属于对象,它只属于自己的类,所以对象当中不包含静态数据。  	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public static long getIn() {
		return In;
	}
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}

}

反序列化的前提条件:需要这个类的class文件

序列化中序列号的冲突
在这里插入图片描述

PrintWrite

/*
 *  打印流
 *    PrintStream 字节
 *    PrintWriter 字符
 *  打印流的特点:
 *   1. 此流不负责数据源,只负责数据目的
 *   2. 为其他输出流,添加功能
 *   3. 永远不会抛出IOException
 *      但是,可能抛出别的异常
 *   
 *   两个打印流的方法,完全一致
 *    构造方法,就是打印流的输出目的端
 *    PrintStream
 *       构造方法,接收File类型,接收字符串文件名,接收字节输出流OutputStream
 *    PrintWriter  
 *       构造方法,接收File类型,接收字符串文件名,接收字节输出流OutputStream, 接收字符输出流Writer
 *   
 */
public class PrintWriterDemo {
	public static void main(String[] args) throws  IOException {
		function_3();

	}
	/* 
	 * 打印流,可以开启自动刷新功能
	 * 满足2个条件:
	 *   1. 输出的数据目的必须是流对象
	 *       OutputStream  Writer  不可以是File  PrintWriter
	 *   2. 必须调用println,printf,format三个方法中的一个,启用自动刷新
	 */
	public static void function_3()throws  IOException{
		//File f = new File("XXX.txt");
		FileOutputStream fos = new FileOutputStream("c:\\5.txt");
		PrintWriter pw = new PrintWriter(fos,true);//true表示开启张之洞刷新。未关闭前会自动输出到文本中
		pw.println("i");
		pw.println("love");
		pw.println("java");
		pw.close();
	}
	
	/*
	 * 打印流,输出目的,是流对象
	 * 可以是字节输出流,可以是字符的输出流
	 * OutputStream  Writer
	 */
	public static void function_2() throws IOException{
	//	FileOutputStream fos = new FileOutputStream("c:\\3.txt");
		FileWriter fw = new FileWriter("c:\\4.txt");
		PrintWriter pw = new PrintWriter(fw);
		pw.println("打印流");
		pw.close();
	}
	/*
	 * 打印流,输出目的,String文件名
	 */
	public static void function_1() throws FileNotFoundException{
		PrintWriter pw = new PrintWriter("c:\\2.txt");
		pw.println(3.5);
		pw.close();
	}
	
	/*
	 * 打印流,向File对象的数据目的写入数据
	 * 方法print println  原样输出
	 * write方法走码表
	 */
	public static void function() throws FileNotFoundException{
		File file = new File("c:\\1.txt");
		PrintWriter pw = new PrintWriter(file);
		pw.println(true);
		pw.write(100);
		pw.close();
	}
}

文章来源:https://blog.csdn.net/Thrive_LCX/article/details/135362922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。