JAVA io流笔记09 对象处理流

本文详细介绍了Java中对象的序列化与反序列化过程,包括如何使用ObjectOutputStream和ObjectInputStream进行对象的写入与读取。通过具体实例,展示了序列化类Employee的实现,以及使用transient关键字排除特定字段不被序列化的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package FileText;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

//对象处理流 
//反序列化 :输入流 ObjectInputStream   主要方法:readObject()
//序列化:输出流 ObjectOutputStream    主要方法:writeObject()

//注意: 先序列化后反序列化,并且序列化,反序列化顺序必须一致
//并非所有对象都可以实现序列化 ,必需继承 java.io.Serializable  /或者直接继承Serializable
//并非所有属性都必须序列化,不想序列化的可以使用transient

public class ObjectInputStream09 {
public static void main(String args[]) throws IOException, ClassNotFoundException{
    change();
}
public static void change() throws ClassNotFoundException, IOException{
    Employee emp = new Employee("player",100000);
    //创建源
    File file = new File("D:/text/dd/ObjectText.txt");
    //选择流
    ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
    out.writeObject(emp);
    out.flush();
    
    getchange(file);
}

public static void getchange(File file) throws ClassNotFoundException{
    try {
        ObjectInputStream input = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
        Object obj = input.readObject();
        if(obj instanceof Employee){
            Employee emp =(Employee)obj;
            
            System.out.println(emp.getName());
            System.out.println(emp.getSalary());  
            //输出结果为null   100000.0//因为name使用了 transient 所以并未序列化                                           
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

class Employee implements  java.io.Serializable{          //例子
    private transient String name = "wu";   //不想序列化的属性
    private double salary = 100000;
    //生成get,set,方法 以及带参构造,无参构造
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
    public Employee(String name, double salary) {
        super();
        this.name = name;
        this.salary = salary;
    }
    public Employee() {
        super();
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值