精华内容
下载资源
问答
  • java中transient

    2019-03-13 23:41:18
    transientjava中的关键字,变量修饰符,被 transient 修饰的变量不能被序列化。如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列...

    transient

        transient 是java中的关键字,变量修饰符,被 transient 修饰的变量不能被序列化。如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

    什么是序列化
        我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。
    Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的。

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

       在 Java 中有两种实现序列化的方式,Serializable 和 Externalizable,可能大部分人只知道 Serializable 而不知道 Externalizable
    这两种序列化方式的区别是:实现了 Serializable 接口是自动序列化的,实现 Externalizable 则需要手动序列化,通过 writeExternal 和 readExternal 方法手动进行。

    transient 关键字总结
    1)transient修饰的变量不能被序列化;一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问

    2)transient只作用于实现 Serializable 接口;

    3)transient只能用来修饰普通成员变量字段,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

    4)不管有没有 transient 修饰,静态变量都不能被序列化;反序列化后类中static型变量username的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的

     

    说到序列化了,开发当中常会通过Json工具将要返回的对象序列化,如常用工具Jackson,fastjson,gson

    SpringMVC中则利用spring mvc3的注解@ResponseBody,无需使用其他工具

    展开全文
  • 主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • Java中transient关键字

    2019-06-12 21:24:59
    Java中transient关键字1.只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 2.如果在实现了Serilizable接口的类中,对该类的某属性添加transient关键字,那么在序列化对象的时候,这个属性...

    Java中transient关键字
    1.只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 
    2.如果在实现了Serilizable接口的类中,对该类的某属性添加transient关键字,那么在序列化对象的时候,这个属性就不会被序列化。 
    3.transient关键字只能修饰变量,而不能修饰方法和类。

        Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。比如,密码字段是非常敏感的字段,所在类在序列化时,不允许写到文件。

        transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 

    注意static变量也是可以串行化的。

    原文:https://blog.csdn.net/liu16659/article/details/80457688 

    网址:https://www.cnblogs.com/wangmingshun/p/5389042.html

     

     

    展开全文
  • Java中Transient关键字解释
            Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。 
            transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 

    首先,让我们看一些Java serialization的代码: 

    public class LoggingInfo implements java.io.Serializable 
    { 
        private Date loggingDate = new Date(); 
        private String uid; 
        private transient String pwd; 
        
        LoggingInfo(String user, String password) 
        { 
            uid = user; 
            pwd = password; 
        } 
        public String toString() 
        { 
            String password=null; 
            if(pwd == null) 
            { 
            password = "NOT SET"; 
            } 
            else 
            { 
                password = pwd; 
            } 
            return "logon info: /n   " + "user: " + uid + 
                "/n   logging date : " + loggingDate.toString() + 
                "/n   password: " + password; 
        } 
    } 
            现在我们创建一个这个类的实例,并且串行化(serialize)它 ,然后将这个串行化对象写入磁盘。 
    LoggingInfo logInfo = new LoggingInfo("MIKE", "MECHANICS"); 
    System.out.println(logInfo.toString()); 
    try 
    { 
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("logInfo.out")); 
        o.writeObject(logInfo); 
        o.close(); 
    } 
    catch(Exception e) {//deal with exception} 
    
    To read the object back, we can write 
    
    try 
    { 
        ObjectInputStream in =new ObjectInputStream(new FileInputStream("logInfo.out")); 
        LoggingInfo logInfo = (LoggingInfo)in.readObject(); 
        System.out.println(logInfo.toString()); 
    } 
    catch(Exception e) {//deal with exception} 

            如果我们运行这段代码,我们会注意到从磁盘中读回(read——back (de-serializing))的对象打印password为"NOT SET"。这是当我们定义pwd域为transient时,所期望的正确结果。 
    现在,让我们来看一下粗心对待transient域可能引起的潜在问题。假设我们修改了类定义,提供给transient域一个默认值, 

    代码如下: 


    LoggingInfo logInfo = new LoggingInfo("MIKE", "MECHANICS"); 
    System.out.println(logInfo.toString()); 
    try 
    { 
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("logInfo.out")); 
        o.writeObject(logInfo); 
        o.close(); 
    } 
    catch(Exception e) {//deal with exception} 
    
    To read the object back, we can write 
    
    try 
    { 
        ObjectInputStream in =new ObjectInputStream(new FileInputStream("logInfo.out")); 
        LoggingInfo logInfo = (LoggingInfo)in.readObject(); 
        System.out.println(logInfo.toString()); 
    } 
    catch(Exception e) {
        //deal with exception
    } 
            如果我们串行化GuestLoggingInfo的一个实例,将它写入磁盘,并且再将它从磁盘中读出,我们仍然看到读回的对象打印password 为 "NOT SET"。当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象。 
    展开全文
  • 总结一下Java中transient关键字的作用: 首先从transient单词本身的意思来理解,它的英文原意为:短暂的,暂时的 它的作用体现在将数据序列化的时候,你不想把其中的某个属性序列化到文件中,就需要用transient...

    总结一下Java中transient关键字的作用:

    首先从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<Student> 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<Student> list = (List<Student>) object;
                list.forEach(System.out::println);
            }
        }

    结果:

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

    展开全文
  • JAVA中transient关键字的使用 transient这个关键字,在java中大家可能遇到的不多,最近阅读JDK源码的时候看到,和大家分享一下。 transient,在序列化和反序列化的时候,可以进行关键字的屏蔽,只对需要进行持久化的...
  • Java中transient关键字的详细总结

    万次阅读 多人点赞 2018-06-14 22:15:12
    一、概要介绍Java中transient关键字,transient是短暂的意思。对于transient 修饰的成员变量,在类实例的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的...
  • java中transient关键字的用法其实不用多说,另外需要注意两个问题,这里简单介绍用法及注意事项: 1、实现Serializable后使用transient修改时的字段不能序列化 实现Serializable接口,使用transient修饰type变量...
  • JAVA中transient 关键字

    2019-03-18 15:09:20
    今天学习到对象流,序列化反序列化的时候,老师用了一个transient关键字来防止某个属性被序列化,脑子一头懵逼,于是在网上看到了找了别人的博客,也不算是豁然开朗,也算是...大佬写的JAVA中的关键字 transient ...
  • java中transient和volatile关键字区别在于:
  • java中transient关键字

    2020-04-09 21:20:56
    2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化(Externalizable可以实现静态变量序列化)。 3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,...
  • java中transient的理解

    2011-10-14 13:15:42
    java中transient的理解 1、java的serialization提供了一个非常棒的存储对象状态的机制,说白了serialization就是把对象的状态存储到硬盘上去,等需要的时候就可以再把它读出来使用。但是在存储对象状态时,我们有...
  • 本文来自 石锋强 的CSDN 博客 ,全文地址请点击:...译文出处:Why does Java have transient variables? 另外推荐一篇文章,我觉得写得挺好的Java深度历险(十)——Java对象序列化与RMI java ...
  • java transient关键字

    千次阅读 2018-02-11 23:24:29
    见:https://baike.baidu.com/item/transient/3870237?fr=aladdinjava语言的关键字,变量修饰符,如果用transient声明一个...Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的...
  • Java中Transient关键字

    2019-01-20 11:59:00
    我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和...
  • 参考链接: Java中transient关键字 今天学习到对象流,序列化反序列化的时候,老师用了一个transient关键字来防止某个属性被序列化,脑子一头懵逼,于是在网上看到了找了别人的博客,也不算是豁然开朗,也算是...
  • Java中transient的用法

    2020-10-03 20:48:17
    某一个数据比较敏感,我们不需要存储下来。即指该数据不需要序列化。 例如:用户的密码 private transient String pwd;
  • 根据The Java Language Specification, Java SE 8 Edition:变量如果被transient关键字修饰,那么当对这个类的实例进行持久化(Serializable)保存时,这个被修饰的变量不会被持久化。 比如有一个Point类的实例,当...
  • Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程, 一般用来实现表之间字段的关联,加上...
  • JAVA中transient关键字作用

    千次阅读 2018-08-01 15:35:59
    首先介绍一下序列化Serializable 通常一个类实现序列化方式是实现序列化接口: class XXX implements Serializable ...transient关键字的作用,在已实现序列化的类,有的变量不需要保存在磁盘,就要tra...
  • 导师让我学习序列化和反序列化的时候才意识到自己的对java中transient关键字不熟。看了很多介绍和学习笔记之后,对transient关键字的使用做一下总结: 如果一个对象只要实现了Serilizable接口,这个类的所有属性和...
  • Java中transient的使用说明

    千次阅读 2016-12-22 08:36:21
    Java中transient关键字,从字面意义理解,transient为短暂的意思,transient应用于class的field上,即说明该field为短暂的,那对于1个成员变量,短暂的成员变量意味着什么?transient 修饰的变量,在类实例的序列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,620
精华内容 1,048
关键字:

java中transient

java 订阅