精华内容
下载资源
问答
  • Transient关键字的作用

    2019-09-24 23:00:56
    在对象序列化时候,有些变量不需要序列化,比如密码等,可以使用transient关键字来解决这个问题,transient修饰变量不会被序列化。 例子: 1 import java.io.*; 2 import java.util.Date; 3 4 5 /**...

    在对象序列化的时候,有些变量不需要序列化,比如密码等,可以使用transient关键字来解决这个问题,transient修饰的变量不会被序列化。

    例子:

     1 import java.io.*;
     2 import java.util.Date;
     3  
    4
    5 /** 6 * Created by leiqiang on 2014/7/25. 7 */ 8 public class TransientTest implements Serializable{ 9 private Date date = new Date(); 10 private String username; 11 private transient String password; 12 13 public TransientTest(String username,String password){ 14 this.username=username; 15 this.password=password; 16 } 17 18 @Override 19 public String toString() { 20 return new Date()+" username "+username+" : password "+password; 21 } 22 23 public static void main(String[] args) throws Exception{ 24 TransientTest transientTest = new TransientTest("lei","1234"); 25 System.out.println(transientTest); 26 FileOutputStream fileOutputStream = new FileOutputStream("d:/Cache/TransientTest.txt"); 27 ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 28 objectOutputStream.writeObject(transientTest); 29 objectOutputStream.close(); 30 Thread.sleep(2000); 31 FileInputStream fileInputStream = new FileInputStream("d:/Cache/TransientTest.txt"); 32 ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 33 transientTest = (TransientTest)objectInputStream.readObject(); 34 System.out.println(transientTest); 35 } 36 }

    运行结果:

    1 Fri Jul 25 13:56:13 CST 2014 username lei : password 1234
    2 Fri Jul 25 13:56:15 CST 2014 username lei : password null

    转载于:https://www.cnblogs.com/leistrong/p/3867885.html

    展开全文
  • transient关键字的作用

    2016-03-08 14:00:17
    transient作用: ...具体例子就不写了,transient关键字可以解决在实际开发过程中一个类有些属性需要序列化,而其他属性不需要被序列化问题,比如说一些我们不愿意持久化和恢复属性,敏感信

    transient作用:

    当对象被序列化时(写入字节序列到目标文件),transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。

    具体例子就不写了,transient关键字可以解决在实际开发过程中一个类的有些属性需要序列化,而其他属性不需要被序列化的问题,比如说一些我们不愿意持久化和恢复的属性,敏感信息等。

    展开全文
  • java中transient关键字的作用发布时间:2020-06-24 10:30:35来源:亿速云阅读:106作者:Leah这期内容当中的小编将会给大家带来有关java中transient关键字的作用,以专业的角度为大家分析和叙述,阅读完这篇文章希望...

    java中transient关键字的作用

    发布时间:2020-06-24 10:30:35

    来源:亿速云

    阅读:106

    作者:Leah

    这期内容当中的小编将会给大家带来有关java中transient关键字的作用,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    作用:

    体现在将数据序列化的时候,你不想把其中的某个属性序列化到文件中,就需要用transient修饰,指明该属性是一个临时的属性

    这是一个学生类:public class Student implements Serializable {//注意:要想序列化,必须实现Serializable接口

    private String name;

    private Integer age;

    private transient String address; //使用transient修饰

    public Student() {

    }

    public Student(String name, Integer age, String address) {

    this.name = name;

    this.age = age;

    this.address = address;

    }

    //Getter/Setter

    }

    我序列化的时候不打算将学生的地址这个属性保存,只想保存name和age属性,我将adress属性用transient关键字修饰,下面进行序列化:public class TestStudent {

    public static void main(String[] args) throws IOException {

    List list = new ArrayList<>();

    Student s1 = new Student("Jack", 20, "北京");

    Student s2 = new Student("Rose", 21, "上海");

    Student s3 = new Student("Hoke", 22, "深圳");

    Student s4 = new Student("Mark", 23, "天津");

    Student s5 = new Student("Json", 24, "成都");

    list.add(s1);

    list.add(s2);

    list.add(s3);

    list.add(s4);

    list.add(s5);

    //将学生信息序列化到student.txt文件中

    File file = new File("student.txt");

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));

    oos.writeObject(list);

    }

    }

    下面进行反序列化,进行验证transient的作用:@Test

    public void test() throws IOException, ClassNotFoundException {

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("student.txt")));

    Object object = ois.readObject();

    if (object instanceof List) {

    List list = (List) object;

    list.forEach(System.out::println);

    }

    }

    结果:

    1e9eb273046e0903f9a219bf8c6d993e.png

    可以看到输出结果中的address属性值为null,没有将值序列化进去;

    上述就是小编为大家分享的java中transient关键字的作用了,如果您也有类似的疑惑,不妨碍参照上述分析进行理解。如果想了解更多相关内容,请关注亿速云行业资讯。

    展开全文
  • 为了在一个特定对象一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化时候,transient型变量值不包括在序列化表示中,然而非transient变量是被包括进去。简而言...

    Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。

    为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。

    当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

    简而言之,被transient修饰的变量不参与序列化和反序列化。

    接下来用代码来证明一下。

    新建一个Student类实现Serializable 接口,并重写其toString方法便于观察结果。

    一个age属性不被transient修饰,一个name属性被transient修饰。

    public class Student implements Serializable {

    private int age;

    private transient String name;

    public Student() {

    }

    public Student(int age, String name) {

    this.age = age;

    this.name = name;

    }

    @Override

    public String toString() {

    return "Student{" + "age=" + age + ", name='" + name + '\'' + '}';

    }

    }

    然后在TransientTest类里边测试。

    PS:

    为了代码简洁这里的IO操作没有进行try catch操作而是直接抛出了。

    public class TestTransient {

    public static void main(String[] args) throws Exception {

    // 实例化一个Student对象.

    Student student = new Student(15, "HuaGe");

    System.out.println(student);

    // 将student对象写入磁盘文件(序列化)

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));

    oos.writeObject(student);

    oos.close();

    // 从磁盘文件读取student对象(反序列化)

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt"));

    student = (Student) ois.readObject();

    System.out.println(student);

    }

    }

    运行main方法,观察控制台打印信息。

    ba314bd3a3c23295dbbaad1b1f0a7b74.png

    发现经过了序列化和反序列化后,name属性从HuaGe变为了null.

    这就说明了被transient修饰的变量不参与序列化和反序列化。

    那有没有例外呐?

    我们知道,java中有两种序列化的方式。

    1. 实现Serializable接口。

    2. 实现Externalizable接口。

    Externalizable接口是Serializable接口的子类

    源码如下

    public interface Externalizable extends java.io.Serializable {

    void writeExternal(ObjectOutput out) throws IOException;

    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;

    }

    这个接口的两个方法可以指定对类中的哪些属性进行序列化。

    使用这个接口时,无论属性有没有被transient修饰,

    默认不对任何属性进行序列化。所以实现了Externalizable接口的类

    一般不再使用transient修饰属性。

    总结:

    1. 被transient修饰的变量不参与序列化和反序列化

    2. transient一般在实现了Serializable接口的类中使用。

    以上只是个人的一些理解,如果哪里不对,还请指出!

    展开全文
  • 1.从Serilizable说到...4.`ArrayList`里面`elementData`都被`transient` 关键字修饰了,为什么`ArrayList`还可以序列化呢?5.除了transient,有没有其他方式,可以屏蔽反序列化? 1.从Serilizable说到tra...
  • 首先介绍一下序列化Serializable ...transient关键字的作用,在已实现序列化的类中,有的变量不需要保存在磁盘中,就要transient关键字修饰,如银行卡密码等,就这个作用------在已序列化的类中使变量不序列化 ...
  • java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。 transient使用小结 1)一旦变量被transient...
  • 文章目录transient关键字概述java中序列化序列化概念什么时候需要序列化,实现序列化过程HashMap是如何实现序列化 transient关键字概述 使用transient关键字修饰属性,在保存对象时,该属性并不会被保存。 ...
  • 集合的作用就是以一定的方式组织、存储数据。下面说说ArrayList,只捡干货聊。ArrayList特点1、ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。2、...
  • 【转】Java对象表示方式:序列化、反序列化和transient关键字的作用
  • 如果一个可序列化对象包含对某个不可序列化对象引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。...换句话来说就是,用transient关键字标记成员变量不参与序列化过程。 ...
  • abstract表明类或者成员方法具有抽象属性assert断言,用来进行程序调试boolean基本数据类型之一,声明布尔类型的关键字break提前跳出一个块byte基本数据类型之一,字节类型case用在switch语句之中,表示其中一个...
  • 关于transient关键字 举个例子 参考资料 先解释下Java中对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化含义; Java中对象序列化指是将对象转换成以字节序列形式来表示,这些字节序列...
  • Java对象表示方式1:序列化、反序列化和transient关键字的作用   平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西...
  • 浅谈Java中transient关键字的作用

    千次阅读 2017-07-24 19:24:59
    注意,本地变量是不能被transient关键字修饰。 2、被transient关键字修饰变量不再能被序列化。 3、一旦变量被transient修饰,变量将不再是对象持久化一部分,该变量内容在序列化后无法获得访问。也可以认为在...
  • 为了在一个特定对象一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化时候,transient型变量值不包括在序列化表示中,然而非transient变量是被包括进去。简而言...
  • 1. transient使用1)被transient关键字修饰变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。2)一旦变量被transient修饰,变量将不再是对象持久化一部分,该变量内容在序列化后无法...
  • Java对象表示方式1:序列化、反序列化和transient关键字的作用 平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,...
  • 4.`ArrayList`里面`elementData`都被`transient` 关键字修饰了,为什么`ArrayList`还可以序列化呢?5.除了transient,有没有其他方式,可以屏蔽反序列化? 1.从Serilizable说到transient 我们知道,如果一个对象...
  • PS,记得之前看HashMap源码时候,发现有个字段是用transient修饰,我觉得还是有道理,确实没必要对这个modCount字段进行序列化,因为没有意义,modCount主要用于判断HashMap是否被修改(像put、remove操作...
  • transient关键字的作用及使用方法

    万次阅读 2018-08-27 21:41:17
    1. transient的作用及使用方法  我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 800
精华内容 320
关键字:

transient关键字的作用