java序列化介绍

 
java序列化介绍
什么是序列化,确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以
有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,
可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些
保存下来的对象。这种情况下就要用到对象的序列化。


一般对象序列化后会保存在存储设备(硬盘)上,以文件的形式出现


只 有序列化的对象才可以存储在存储设备上。为了对象的序列化而需要继承的接口也只是一个象征性的接口而已,也就是说继承这个接口说明这个对象可以被序列化了,没有其他的目的。之所以需要对象序列化的目的,是因为有时候对象需要在网络上传输,传输的时候需要这种序列化处理,从服务器硬盘上把序列化的对象取 出,然后通过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。


我个人理解序列化就是把你的对象(也就是你定义的一个类)转化成二进制的代码,方便储存和传送.也就是序列化了的对象既可以保存下来,也可以通过流的形式进行传送
例子
mport java.io.*;

public class Test {
        public static void main(String[] args) {
                Employee harry = new Employee("Harry Hacker", 50000);
                Manager manager1 = new Manager("Tony Tester", 80000);
                manager1.setSecretary(harry);
                Employee[] staff = new Employee[2];
                staff[0] = harry;
                staff[1] = manager1;
                try {
                        ObjectOutputStream out = new ObjectOutputStream(
                                        new FileOutputStream("employee.dat"));
                        out.writeObject(staff);
                        out.close();
                        ObjectInputStream in = new ObjectInputStream(new FileInputStream(
                                        "employee.dat"));
                        Employee[] newStaff = (Employee[]) in.readObject();
                        in.close();

                        /**
                         * 通过harry对象来加薪 将在secretary上反映出来
                         */
                        newStaff[0].raiseSalary(10);
                        for (int i = 0; i < newStaff.length; i++)
                                System.out.println(newStaff[i]);
                } catch (Exception e) {
                        e.printStackTrace();

                }
        }
}

class Employee implements Serializable {
        public Employee(String n, double s) {
                name = n;
                salary = s;
        }
        /**
         *
         * 加薪水
         *
         */
        public void raiseSalary(double byPercent) {
                double raise = salary * byPercent / 100;
                salary += raise;
        }

        public String toString() {
                return getClass().getName() + "[name = " + name+ ",salary = " + salary+ "]";
        }
        private String name;
        private double salary;
}

class Manager extends Employee

{
        public Manager(String n, double s)
        {
                super(n, s);
                secretary = null;
        }
        /**
         *
         * 设置秘书
         *
         */
        public void setSecretary(Employee s)
        {
           secretary = s;
        }
        
        public String toString()
        {
                return super.toString()+ "[secretary = " + secretary+ "]";
        }

        // secretary代表秘书

        private Employee secretary;

}.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值