java学习笔记 对象序列化

对象序列化就是把一个对象变为二进制数据流的一种方法。如果一个类的对象想被序列化,它要实现Serializable接口,这个接口是个标识接口(只定义了接口,并没有定义方法),表示这个对象具有被序列化的能力。

实现Serializable接口之后,表示这个类具有被数据流传输的能力,如果想进行输入和输出,要使用两个类:ObjectOutputStream 和 ObjectInputStream

序列化时,只有属性被序列化

如果一个对象的某个属性不希望被序列化,可以使用transient关键字声明(把这个属性当成透明,在序列化时不予考虑)。

Serializable接口使用:

import java.io.*;

public class Test {
    public static void main(String[] args)throws Exception {
        try{
            ObjectOutputStream oos = null;
            ObjectInputStream ois = null;
            File f = new File("e:\\java\\Person.txt");
            OutputStream os = new FileOutputStream(f);
            InputStream is = new FileInputStream(f);
            oos = new ObjectOutputStream(os);
            ois = new ObjectInputStream(is);

            Person p1 = new Person(23,"宝宝",180.00);
            oos.writeObject(p1);
            oos.close();
            Person p2 = (Person)ois.readObject();
            ois.close();
          System.out.println(p2);
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}

class Person implements Serializable {
    int age = 8;
    String name;
    transient double height = 170;//transient声明的变量在序列化时不予考虑,所以在反序列化时就是默认值0

    Person(int age,String name,double height) {
        this.age = age;
        this.name = name;
        this.height = height;
    }    

    public String toString() {
        return "姓名:" + this.name + "  年龄:" + this.age + "  身高:" + this.height;
    }
}

时间: 2024-10-27 12:10:22

java学习笔记 对象序列化的相关文章

[Java学习笔记]对象克隆

对象克隆: 浅克隆: 被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象 深克隆: 被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象 Java中实现克隆: Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法 查看Java源代码发现Object中

Jackson学习笔记-对象序列化

一.用ObjectMapper.readValue(jsonString, Student.class) , ObjectMapper.writeValueAsString(student) import java.io.IOException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jack

Java学习笔记 对象拷贝

1.Java里的clone分为: A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍. Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法.必须要遵循下面三点 1.在派生类中覆盖基类的clone()方法,并声明为public[Object类中的clone()方法为protected的]. 2.在派生类的clone()方法中,调用super.clone(). 3.

24 Java学习之对象序列化和反序列化

一. 序列化和反序列化的概念 对象序列化:把对象转换为字节序列的过程 对象反序列化:把字节序列恢复为对象的过程 1. 为何要进行序列化 我们知道当虚拟机停止运行之后,内存中的对象就会消失.在很多应用中,需要对某些对象进行序列化,让他们离开内存空间,进入物理硬盘,便于长期保存.例如,最常见的是WEB服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些Session先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原

java学习笔记_序列化

如果父类没有实现Serializable接口,子类实现了Serializable接口,那么子类是可以序列化的. 但是如果想要反序列化,那么就需要父类支持默认构造函数. 因为在反序列化的过程中不会调用子类的构造函数,而会以不带参数的形式调用父类的构造函数. 1 public class dog { 2 public dog(String n) { name = n; } 3 public dog() { name = ""; } 4 public String name; 5 } 1 i

Java学习笔记一:对象与存储

1.用引用来操作对象 Java是面向对象的编程语言,一切都能看作是对象,通过引用来完成对对象的操作. // String 是对象,而s对指向这个String对象的引用 String s; 注意:我们是通过对象的引用来操纵对象数据的,如果对象没有关联数据(如没有被初始化),则会出现空引用,报空指针异常:java.lang.NullPointerException 2.数据存储 (1)寄存器:位于CPU内部,是处理最快的区域,但是存储空间有限.Java不能通过程序直接控制. (2)堆栈:位于RAM(

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对