Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

JavaSE学习 第十四章 高级IO编程 和 对象序列化(6)

来源: 未知 分享至:

 

前面的 DataInputStream,DataOutputStream 分别实现了 java.io.DataOutput/DataInput 接口,这里 ObjectOutput/ObjectInput 两个接口在上面的两个接口之上

还分别添加了方法:writeObject / readObject,而 ObjectOutputStream /ObjectInputStream 分别实现了上面的两个接口,还继承了 java.io.OutputStream/InputStream

java.io.Externalizable 继承了 java.io.Serializable ,用于在对象序列化过程中提供增强的功能

 

④对象序列化过程中的数据保护

标记性接口Serializable (这个接口中没有任何的抽象方法,标记性接口一般是用于作为一种过滤器)

在对象序列化过程中,其所属类的static属性和方法代码不会被序列化处理。

对于个别不希望被序列化的非static属性,可以在属性声明时使用transient关键字进行标明。

用法举例:

例:

Person.java

package v512.chap14;
import java.io.Serializable;
public class Person implements Serializable{
    private static int resource = 100;//static属性,不会序列化
    private String name ;//会序列化
    private transient String password;//transient 不会序列化

    public Person(String name,String password){
        this.name = name;
        this.password = password;
    }

    public static void setResource(int resource){
        Person.resource = resource;
    }
    public static int getResource(){
        return resource;    
    }
    public String toString(){
        return "name:" + name + "tpassword:" + password;
    }
}

 

WriteObject.java

package v512.chap14;
import java.io.*;

public class WriteObject {
    public static void main(String[] args){
        try{
            Person.setResource(2345);
            FileOutputStream fos = new FileOutputStream("D:\\person.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            Person p1 = new Person("Scott","tiger");
            Person p2 = new Person("Spring","field");
            System.out.println(Person.getResource());  // 2345
            oos.writeObject(p1);
            oos.writeObject(p2);
            oos.close();
        }catch(IOException e){
            e.printStackTrace();    
        }        
    }
}

 

ReadObject.java

package v512.chap14;
import java.io.*;

public class ReadObject{
    public static void main(String[] args){
        try{
            //Person.setResource(5555);
            FileInputStream fis = new FileInputStream("D:\\person.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Person e1 = (Person)ois.readObject();
            Person e2 = (Person)ois.readObject();
            System.out.println(e1);        
            System.out.println(e2);        
            System.out.println(Person.getResource());
            System.out.println(e1.getResource());
            ois.close();
        }catch(IOException e){
            e.printStackTrace();    
        }catch(ClassNotFoundException e){
            e.printStackTrace();    
        }        
    }
}

控制台输出:

name:Scott    password:null
name:Spring    password:null
100
100

 

密码没有,说明password没有序列化,而且resource还是100,不是2345,说明static属性也是不会序列化的

而且static属性的值不会因为序列化时resource的值改变而改变

 

8. NIO   (暂时没有仔细看)

什么是NIO?

NIO基础:以下三者是NIO的核心

缓冲区(Buffer)

通道(Channel):和操作系统底层的双向输入输出管道关联

字符集转换(Charset)

 

高级NIO技术

子缓冲区和数据共享

只读缓冲区

内存映射文件

文件锁定


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史