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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!