美文网首页
java对象序列化

java对象序列化

作者: kemir天明 | 来源:发表于2018-06-03 18:15 被阅读0次

对象序列化是指将java对象转化成二进制流的过程。反之则是反序列化的过程。java中对象通过实现Serializable借口来实现序列化。序列化需要注意以下几点:

1.静态属性无法进行序列化(静态属性是属于类而非对象)。

2.如果A对象属性包含B对象的引用,则序列化A对象时B对象也会被序列化。

3.若被序列化的对象中包含非序列化的属性,序列化是会报 java.io.NotSerializableException 错误,未被序列化的类要加关键字 transient 修饰。

package com.example.demo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;

public class TestSerilizable{

   public static void main(String[] args) throws IOException {
       OutputStream fos = new FileOutputStream("D:\\a.txt");
       ObjectOutputStream oos = new ObjectOutputStream(fos);
       Person p = new Person();
       Cat cat = new Cat("katty",p);
       oos.writeObject(cat);
       oos.close();
   }
   
}
class Person{
   
   private String name;

   public Person() {
       // TODO Auto-generated constructor stub
   }
   
   public Person(String name) {
       this.name=name;
   }
   
   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }
   
}

class Cat implements Serializable{
   /**
    * 
    */
   private static final long serialVersionUID = 1L;

   private String name;

   private  Person p;
   
   public Cat() {
       // TODO Auto-generated constructor stub
   }
   
   public Cat(String name,Person p) {
       this.name=name;
       this.p=p;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public Person getP() {
       return p;
   }

   public void setP(Person p) {
       this.p = p;
   }
   
   
}

控制台报如下错误:

 Exception in thread "main" java.io.NotSerializableException: com.example.demo.Person
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at com.example.demo.TestSerilizable.main(TestSerilizable.java:16)

p属性加上 transient 修饰:

class Cat implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String name;

    private transient Person p;
    
    public Cat() {
        // TODO Auto-generated constructor stub
    }
    
    public Cat(String name,Person p) {
        this.name=name;
        this.p=p;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Person getP() {
        return p;
    }

    public void setP(Person p) {
        this.p = p;
    }
    
    
}

程序正常运行。所以序列化的时候一定要注意哦。

相关文章

  • Java-序列化-反序列化

    Thanks Java基础学习总结——Java对象的序列化和反序列化java序列化反序列化原理Java 序列化的高...

  • java序列化那些事儿

    java序列化作用 在说java序列化的作用之前,先说下什么是java序列化吧。java序列化是指把java对象转...

  • 什么是序列化?常见的序列化协议有哪些?

    序列化和反序列化相关概念 什么是序列化?什么是反序列化? 如果我们需要持久化 Java 对象比如将 Java 对象...

  • Java序列化

    Java序列化的几种方式以及序列化的作用 Java基础学习总结——Java对象的序列化和反序列化

  • 序列化(java Serializeable、json、prot

    java序列化 序列化:将对象写入到IO流中反序列化:从IO流中恢复对象意义:序列化机制允许将实现序列化的Java...

  • 认识Java序列化

    我的个人博客,认识Java序列化 引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java ...

  • Java序列化机制

    Java序列化机制 序列化和反序列化 Java序列化是Java内建的数据(对象)持久化机制,通过序列化可以将运行时...

  • 序列化与反序列化

    Java基础学习总结——Java对象的序列化和反序列化 一、序列化和反序列化的概念 把对象转换为字节序列的过程称为...

  • 07-Java序列化面试题(10题)

    1、什么是java序列化,如何实现java序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内...

  • Java序列化

    什么是Java序列化 Java序列化是将对象的状态保存为一组字节,Java反序列化是将这些字节组装成对象。必须注意...

网友评论

      本文标题:java对象序列化

      本文链接:https://www.haomeiwen.com/subject/azajsftx.html