• 老邓的day16


    编程软件:IntelliJ IDEA 2018.3 x64

    应用环境:JDK1.8

    人生名言:感动深受都是说说而已,能靠得住的只有自己。

    技术总结:

    Java 提供了一种对象**序列化**的机制。用一个字节序列可以表示一个对象,该字节序列包含该`对象的数据`、
    `对象的类型`和`对象中存储的属性`等信息。字节序列写出到文件之后,相当于文件中**持久保存**了一个对象的信息。 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行**反序列化**。`对象的数据`、
    `对象的类型`和`对象中存储的数据`信息,都可以用来在内存中创建对象。看图理解序列化: 、ObjectOutputStream类 `java.io.ObjectOutputStream ` 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。 构造方法 - `public ObjectOutputStream(OutputStream out) `: 创建一个指定OutputStream的ObjectOutputStream。

    代码展示:

    public class Employee implements java.io.Serializable {
        public String name;
        public String address;
        public transient int age; // transient瞬态修饰成员,不会被序列化
        public void addressCheck() {
              System.out.println("Address  check : " + name + " -- " + address);
        }
    }
    ```
    
    2.写出对象方法
    
    - `public final void writeObject (Object obj)` : 将指定的对象写出。
    
    ```java
    public class SerializeDemo{
           public static void main(String [] args)   {
            Employee e = new Employee();
            e.name = "zhangsan";
            e.address = "beiqinglu";
            e.age = 20; 
            try {
                  // 创建序列化流对象
              ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.txt"));
                // 写出对象
                out.writeObject(e);
                // 释放资源
                out.close();
                fileOut.close();
                System.out.println("Serialized data is saved"); // 姓名,地址被序列化,年龄没有被序列化。
            } catch(IOException i)   {
                i.printStackTrace();
            }
           }
    }
     反序列化操作1
    
    如果能找到一个对象的class文件,我们可以进行反序列化操作,调用`ObjectInputStream`读取对象的方法:
    
    - `public final Object readObject ()` : 读取一个对象。
    
    ```java
    public class DeserializeDemo {
       public static void main(String [] args)   {
            Employee e = null;
            try {        
                 // 创建反序列化流
                 FileInputStream fileIn = new FileInputStream("employee.txt");
                 ObjectInputStream in = new ObjectInputStream(fileIn);
                 // 读取一个对象
                 e = (Employee) in.readObject();
                 // 释放资源
                 in.close();
                 fileIn.close();
            }catch(IOException i) {
                 // 捕获其他异常
                 i.printStackTrace();
                 return;
            }catch(ClassNotFoundException c)  {
                // 捕获类找不到异常
                 System.out.println("Employee class not found");
                 c.printStackTrace();
                 return;
            }
            // 无异常,直接打印输出
            System.out.println("Name: " + e.name);    // zhangsan
            System.out.println("Address: " + e.address); // beiqinglu
            System.out.println("age: " + e.age); // 0
        }
    }

    心得:

    世上无难事,只怕有心人!

  • 相关阅读:
    写一点应用关于 Lucene.Net,snowball的重新组装(三)
    写一点应用关于 Lucene.Net,snowball的重新组装(二)
    C++ stirng,int 互转(转载)
    特征词选择算法对文本分类准确率的影响(二)
    webGL简单例子(klayge)
    QT 信号和槽
    windows资源管理(内核对象/GDI对象/user对象)
    memcpy memmove区别和实现
    演示软件SpringHome制作
    在浏览器中加载googleEarth插件
  • 原文地址:https://www.cnblogs.com/www-dzsblogs-com/p/13602912.html
Copyright © 2020-2023  润新知