zoukankan      html  css  js  c++  java
  • Java序列化

    一、Java序列化介绍

      1.Java序列化与反序列化

        Serialization(序列化)是一种将对象以一连串的字节描述的过程;

        deserialization(反序列化)是一种将这些字节重建成一个对象的过程。

      2.为什么需要反序列化

        Java中,一切都是对象,在分布式中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。

      Java序列化机制就是为了解决这个问题。......

      3.JDK类库中序列化API

        Java.io.ObjectOutPutStream   表示对象输出流

        (writeObject(Object obj))对指定的对象序列化

        Java.io.ObjectInPutStream     表示对象输入流

        (readObject())对输入流进行反序列化

      4.实现序列化的要求

        实现Serializable或Extermalizable接口类的对象才能被序列化,否则抛出异常

    二、Java序列化的实现

      1.实现Serializable的对象序列化

    public class TestSerial implements Serializable {
    
        public String name = "15pb";
    
        public String getName(){
            return name;
        }
    }
    public class Main {
        
        //Create objectStream
        public static void onCreateStream() throws IOException {
            FileOutputStream fos = new FileOutputStream("temp.out");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            TestSerial ts = new TestSerial();
            oos.writeObject(ts);
            oos.flush();
            oos.close();
        }
    
        //reader objectStream
        public static void reader() throws IOException, ClassNotFoundException {
            FileInputStream fis = new FileInputStream("temp.out");
            ObjectInput oin = new ObjectInputStream(fis);
            TestSerial ts = (TestSerial) oin.readObject();
            System.out.println("name= "+ts.getName());
    
        }
    
        public static void main(String[] args) throws IOException, ClassNotFoundException {
        // write your code here
            onCreateStream();
            reader();
    
        }
    
    
    }

     

      2.实现Extermalizable接口对象的序列化

    public class TestExter implements Externalizable {
    
        public String name ;
        public String Student ;
    
        public void setName(String name){
            this.name = name;
        }
        public void setStudent(String student){
            this.Student = student;
        }
    
        public String toString(){
            return "name= "+this.name+" ,Student= "+this.Student;
        }
    
        @Override
        public void writeExternal(ObjectOutput out) throws IOException {
    
            out.writeObject(name);
            out.writeObject(Student);
        }
    
        @Override
        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    
            name  = (String) in.readObject();
            Student = (String) in.readObject();
        }
    
    
    }
    public class Main{
    public static void main(String[] args) throws IOException, ClassNotFoundException { // write your code here //write ObjectStream TestExter testExter = new TestExter(); testExter.setName("15pb"); testExter.setStudent("hx"); FileOutputStream out = new FileOutputStream("Exter.out"); ObjectOutputStream obj = new ObjectOutputStream(out); obj.writeObject(testExter); //reader ObjectStream FileInputStream in = new FileInputStream("Exter.out"); ObjectInputStream input = new ObjectInputStream(in); TestExter ts = (TestExter) input.readObject(); System.out.println(ts.toString()); } }

  • 相关阅读:
    Redis配置文件详解
    SpingBoot 定时器(跟随Application启动)
    Linux 查找哪些文件包含指定的一个或多个字符串
    帆软报表中sql中出现汉字时乱码
    mysql 匹配奇数、偶数行数据
    vs code 快捷键中英文对照
    前端学习路线汇总
    vscode: Visual Studio Code 常用快捷键1
    vue-router的router.go(n)问题?
    vue2.0 技巧汇总
  • 原文地址:https://www.cnblogs.com/NigelX/p/6758637.html
Copyright © 2011-2022 走看看