`

对象串行化及Transient关键字的使用

阅读更多

http://blog.csdn.net/scruffybear/archive/2007/12/03/1914586.aspx
http://blog.csdn.net/geggegeda/archive/2008/07/25/2709822.aspx

http://xiebh.iteye.com/blog/121311
上面文章看过后对对象串行化及Transient关键字的使用有了一定的理解
总之:串行化即对象序列化的类必须实现Serializable接口,序列化即是将创建的对象能够保存起来,将来要使用的时候再拿出来,如果对象的某个成员不想序列化,那么声明为transient或static
如下类:Student
在测试类中创建Student对象,然后通过ObjectOutputStream将对象的信息写入文件中。
要用的时候再拿出来并强制转化为Student对象,输出。

数据成员:age不定义为transient时,测试结果输出
the name is :zhangshang
the age is :23

而定义为transient时输出为:
the name is :zhangshang
the age is :0

代码如下:

package com.bytecode.openexcel.util;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class TestSerializable {

    public static void main(String[] args) {

        Student st = new Student("zhangshang", 23);

        Student su;

        try {

            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("c:/out.txt")));

            oos.writeObject(st);

            oos.close();

            

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("c:/out.txt")));

            su = (Student)ois.readObject();

            System.out.println(su.toString());

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

    }

}

class Student implements java.io.Serializable{

    

    private String name ;

    private transient int age;

    public Student(){

        

    }

    

    public Student(String name, int age){

        this.name = name;

        this.age = age;

    }

    

    public String toString(){

        return "the name is :" + name + "\nthe age is :" + age;

        

    }

}

  

分享到:
评论

相关推荐

    Java关键字Transient与串行化

    在Java编程语言中,`transient`关键字与对象的序列化(serialization)机制密切相关,它在处理对象状态的持久化时扮演着关键角色。本文将深入探讨`transient`关键字的功能、用途以及它如何影响Java对象的序列化过程。 ...

    java对象的串行化

    对象串行化是Java平台的一个核心特性,它允许对象的状态被保存并能够在不同的时间点或者在不同的系统间进行传输。 **一、串行化的概念和目的** 1. **串行化概念**: 当一个对象被串行化时,它的实例变量(非静态...

    transient Java语言的关键字

    transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,

    Java 串行化(序列化)Serializable/Externalizable

    3. **序列化过滤**:使用`transient`关键字忽略不想序列化的字段,或使用`@serialData`注解指定序列化时的行为。 4. **实现Serializable并提供serialVersionUID**:确保类的序列化兼容性,避免因类结构变化导致的反...

    串行化保存和读取数据示例.zip

    2. **transient关键字**:Java允许你通过`transient`关键字标记某个字段,表示该字段不参与串行化过程。这意味着在反串行化时,这些字段的值不会被还原,需要程序员手动处理。 3. **readObject()和writeObject()**...

    JavaSE考试题参考答案借鉴.pdf

    7. **序列化**:序列化是将对象转化为字节流的过程,transient关键字用于标记某个成员变量不应该参与序列化,避免在反序列化时看到该成员的真实数据。 8. **Map接口**:Map接口用于存储键值对,put()方法用于添加...

    java笔试及答案1111111

    transient关键字用于标记成员变量,表示在序列化时不包含该变量。Serializable接口是实现序列化的标志。 5. **泛型**:泛型提供了一种方式,可以在定义类、接口和方法时引入类型参数,增强了类型安全性和代码复用。...

    中软公司JAVA培训资料.doc

    实现串行化需实现Serializable接口,并注意私有字段、transient关键字和static字段的影响。 线程是并发执行的程序执行单元。Java中,线程有新建、可运行、运行和终止四种基本状态。线程同步是解决多线程共享资源...

    1JavaSE考试题参考答案借鉴.pdf

    7. **序列化**:transient关键字用于标记变量,在序列化时不会保存该变量的值。选项C是正确答案。 8. **Map接口**:保存键值对到Map对象中使用put()方法。选项B是正确答案。 9. **Application运行**:一个Java ...

    Java面试题目汇总英文Java面试题(核心知识).doc

    注意事项包括版本ID(`serialVersionUID`)、transient关键字和static字段不会被序列化。 6. **线程**:线程是程序执行的最小单位。线程状态包括新建、运行、阻塞、等待、超时等待和终止。同步机制包括`synchronized`...

    JAVA程序员-中远面试题目

    注意事项包括处理transient关键字,避免循环引用,理解writeObject和readObject方法。 6. **线程**:线程是程序中的执行流,有新建、就绪、运行、阻塞和死亡五种状态。同步方法、synchronized关键字、wait/notify...

    JAVA 面试题

    实现Serializable接口即可使类支持串行化,注意静态变量和transient修饰的变量不会被序列化。串行化还可以防止反序列化时的安全问题。 5. 线程:线程是程序执行的最小单位,基本状态包括新建、就绪、运行、阻塞和...

    java多线程试题[参考].pdf

    15. **可串行化**:实现`Serializable`接口的类可以被序列化,静态变量默认不会被序列化,但可以通过注解`transient`来标记不想被序列化的变量。 16. **可串行化接口**:与前面的15题相同,这里重复了一次。 17. *...

    1JavaSE考试题参考答案剖析.pdf

    5. **序列化**:使用关键字`transient`可以隐藏某个成员变量,使其在序列化和反序列化过程中不会被处理。 6. **Map操作**:Map对象用于存储键值对,`put(Object key, Object value)`方法用于添加新的键值对。 7. *...

    java多线程试题.pdf

    - 私有数据权限不会阻止默认的序列化机制,除非使用`transient`关键字标记。 10. **进程与线程的关系**: - 进程包含代码和数据,线程包含程序计数器、堆栈和栈指针。 - 进程是重量级的,线程是轻量级的,一个...

    整理后java开发全套达内学习笔记(含练习)

    序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit] stack n.堆栈 [stæk] (对应 heap 堆) statement 程序语句; 语句 ['steitmәnt]' n. 陈述,...

    百度持续交付项目组面试题

    **MySQL事务隔离级别**包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。 - **读未提交**:允许读取尚未提交的数据。 - **读已提交**:只能...

Global site tag (gtag.js) - Google Analytics