java基础常见问题解析(五)输入输出流以及序列化和session

输入输出流以及序列化和session

  1. 在Java 语言中,ObjectOutPutStream 是指
    a. 字节流
    b. 字符流
    c. 对象输出流
    d. 数据流

输入和输出流

I/O流

—1.字节流 InputStream (读非字符数据 比如图片 音频等) –读字节 是所有字节输入流的超类 每次读取一个字节 (8bit) 与OutputStream对应
最常用 FileInputStream

核心 :

ObjectInputStream 对象输入字节流

可以把对象存储到硬盘中 —序列化后存储
读取硬盘中的对象—反序列化后读取

ObjectOutPutStream 对象输出字节流

—2.字符流Reader 用于读取字符流的抽象类 (双字节读取)一个字符两个字节 —-只能读取字符
子类:BufferReader (缓冲 效率比较高)

序列化和反序列化
例子

/*
 * 演示对象输入输出流,理解序列化的概念
 * */
public class ObjectStreamTest {

    public static void main(String[] args) throws Exception {
        //ObjectStreamTest.writeObject();
        ObjectStreamTest.readObject();
    }
    //读出
    public static void readObject() throws Exception {
        ObjectInputStream read=new ObjectInputStream(new FileInputStream("C:/student.o"));
        Student s1=(Student)read.readObject();
        Student s2=(Student)read.readObject();
        System.out.println(s1 + "," + s2);
    }
    //写入
    public static void writeObject() throws Exception {
        ObjectOutputStream write =new ObjectOutputStream(new FileOutputStream("c:/student.o"));
        write.writeObject(new Student(1, "aa"));
        write.writeObject(new Student(2, "bb"));
        write.close();
    }
}

实体类对象

// 内存--->硬盘  就是转化为二进制的过程 (序列化过程)
public class Student implements Serializable{//必须实现Serializable接口,否则无法存入硬盘
    //序列号 :生成唯一标识号 
    private static final long serialVersionUID = 3326694874182755921L;
    @Override
    public String toString() {
        return "Student [id=" + id + ", age=" + age + "]";
    }

    private int id;
    private String age;

    public Student(int id, String age) {
        super();
        this.id = id;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

}
  • 序列化和反序列化在web项目中的应用场景

Web服务器中work目录下边有可序列化的session文件
web服务器关闭 session并没有销毁,session被持久化(序列化)到硬盘 生成文件,并在web服务器重新启动后 将硬盘中的文件反序列化到内存中,前提序列化和反序列化的对象必须实现Serializable接口

session销毁的条件
1.浏览器关闭,30分钟没有跟服务器段进行交互 session声明周期过期
2.session有销毁的方法

用户在登陆状态保持session,停掉web服务器,session并没有销毁,而在重启web服务器后 session依然会被反序列化到内存,重新刷新页面,依然在登录状态。重新打开浏览器(清除缓存 session失效)则在非登陆状态。

如果强制修改序列化号,则重启web服务器则会报反序列化报错

你可能感兴趣的:(java基础知识点)