精华内容
下载资源
问答
  • transient关键字作用
    2020-11-02 21:39:18

    transient关键字作用

    首先介绍一下序列化Serializable

    通常一个类实现序列化方式是实现序列化接口: class XXX implements Serializable

    序列化的作用:把数据长久的保存在磁盘中,磁盘和内存是不同的,内存一般在程序运行时占用,数据保存周期短,随程序结束而结束,磁盘可以长久保存数据

    transient关键字的作用,在已实现序列化的类中,有的变量不需要保存在磁盘中,就要transient关键字修饰,如银行卡密码等,就这个作用------在已序列化的类中使变量不序列化

    更多相关内容
  • 1. transient作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了...

    1. transient的作用及使用方法

          我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。

          然而有时候,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

          总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

    2. transient使用小结

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

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

    3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

    展开全文
  • java中transient关键字作用

    千次阅读 2016-05-11 09:49:52
    关键字介绍   一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和...

    关键字介绍

     

    一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。但是有种情况是有些属性是不需要序列号的,所以就用到这个关键字。只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

     

    代码:

     

    实现Serializable接口的UserInfo类,并且有一个transient关键字修饰的属性

     

    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. import java.io.Serializable;


      public class UserInfo implements Serializable {  
         
              private static final long serialVersionUID = 1L;  
         
              private String name ;  
               
              private transient String pwd ;  
               
              public UserInfo(String name,String pwd){  
                     this.name =name;  
                     this.pwd =pwd;  
             }  
               
              public String getName() {
      return name;
      }


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


      public String getPwd() {
      return pwd;
      }


      public void setPwd(String pwd) {
      this.pwd = pwd;
      }


      public String toString(){  
                     return "name=" +name +",psw=" +pwd ;  
             }  
      }  



    通过输入输出流编写的测试程序

     

    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.ObjectInputStream;
      import java.io.ObjectOutputStream;


      public class Test {  
      public static UserInfo userInfo = null;
      public static ObjectOutputStream  ObjectOutputStreamo= null;
              public static void main(String[] args) {  
              userInfo = new UserInfo("张三" , "123456" );  
                    System. out.println(userInfo);  
                     try {  
                            // 序列化,被设置为transient的属性没有被序列化  
                           ObjectOutputStreamo = new ObjectOutputStream(new FileOutputStream(  
                                         "D://UserInfo.out"));  
                           ObjectOutputStreamo.writeObject(userInfo);  
                           ObjectOutputStreamo.close();  
                    } catch (Exception e) {  
                           e.printStackTrace();  
                    }  
                     try {  
                            // 重新读取内容  
                           ObjectInputStream in = new ObjectInputStream( new FileInputStream(  
                                         "D://UserInfo.out"));  
                           userInfo = (UserInfo) in.readObject();  
                            // 读取后psw的内容为null  
                           System. out.println(userInfo.toString());  
                    } catch (Exception e) {  
                           e.printStackTrace();  
                    }  
             } 
      }


    运行结果:




    从上面结果能够看出来经过transient关键字修饰的字段是不能够被序列化的。

    文章来源:http://blog.csdn.net/lfsf802/article/details/43239663

    展开全文
  • transient关键字作用及使用方法

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

    1. transient的作用及使用方法

          我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。

          然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

          总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

     

    示例code如下:

     View Code

    输出为:

    复制代码

    read before Serializable: 
    username: Alexia
    password: 123456
    
    read after Serializable: 
    username: Alexia
    password: null

    复制代码

    密码字段为null,说明反序列化时根本没有从文件中获取到信息。

    2. transient使用小结

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

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

    3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

    第三点可能有些人很迷惑,因为发现在User类中的username字段前加上static关键字后,程序运行结果依然不变,即static类型的username也读出来为“Alexia”了,这不与第三点说的矛盾吗?实际上是这样的:第三点确实没错(一个静态变量不管是否被transient修饰,均不能被序列化),反序列化后类中static型变量username的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的,不相信?好吧,下面我来证明:

     View Code

    运行结果为:

    复制代码

    read before Serializable: 
    username: Alexia
    password: 123456
    
    read after Serializable: 
    username: jmwang
    password: null

    复制代码

    这说明反序列化后类中static型变量username的值为当前JVM中对应static变量的值,为修改后jmwang,而不是序列化时的值Alexia。

    3. transient使用细节——被transient关键字修饰的变量真的不能被序列化吗?

    思考下面的例子:

    复制代码

    import java.io.Externalizable;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInput;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutput;
    import java.io.ObjectOutputStream;
    
    /**
     * @descripiton Externalizable接口的使用
     * 
     * @author Alexia
     * @date 2013-10-15
     *
     */
    public class ExternalizableTest implements Externalizable {
    
        private transient String content = "是的,我将会被序列化,不管我是否被transient关键字修饰";
    
        @Override
        public void writeExternal(ObjectOutput out) throws IOException {
            out.writeObject(content);
        }
    
        @Override
        public void readExternal(ObjectInput in) throws IOException,
                ClassNotFoundException {
            content = (String) in.readObject();
        }
    
        public static void main(String[] args) throws Exception {
            
            ExternalizableTest et = new ExternalizableTest();
            ObjectOutput out = new ObjectOutputStream(new FileOutputStream(
                    new File("test")));
            out.writeObject(et);
    
            ObjectInput in = new ObjectInputStream(new FileInputStream(new File(
                    "test")));
            et = (ExternalizableTest) in.readObject();
            System.out.println(et.content);
    
            out.close();
            in.close();
        }
    }

    复制代码

    content变量会被序列化吗?好吧,我把答案都输出来了,是的,运行结果就是:

    是的,我将会被序列化,不管我是否被transient关键字修饰

    这是为什么呢,不是说类的变量被transient关键字修饰以后将不能序列化了吗?

          我们知道在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。因此第二个例子输出的是变量content初始化的内容,而不是null。

    转载自:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html 

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

    千次阅读 2019-01-24 20:59:53
    使用transient关键字修饰的属性,在保存对象时,该属性并不会被保存。 下面的程序定义了一个Usere类,它包含用户名,密码、年龄,其中密码和年龄被transient关键字修饰,此外,该类还实现了 Serializable 接口。 ...
  • transient关键字作用是:被transient修饰的变量不参与序列化和反序列化。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。 Java的serialization...
  • 主要介绍了Java transient关键字原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • JAVA中transient关键字作用

    千次阅读 2018-08-01 15:35:59
    首先介绍一下序列化Serializable 通常一个类实现序列化方式是实现序列化接口: class XXX implements Serializable ...transient关键字作用,在已实现序列化的类中,有的变量不需要保存在磁盘中,就要tra...
  • 4.`ArrayList`里面的`elementData`都被`transient` 关键字修饰了,为什么`ArrayList`还可以序列化呢?5.除了transient,有没有其他的方式,可以屏蔽反序列化? 1.从Serilizable说到transient 我们知道,如果一个对象...
  • transient作用及使用方法,官方解释为: Variables may be marked transient to indicate that they are not part of the persistent state of an object. 我们都知道一个对象只要实现了Serilizable接口,...
  • java transient关键字作用,使用场景。 2016年08月31日 15:31:10 阅读数:4280 transient的作用及使用方法,官方解释为: Variables may be marked transient to indicate that they are not part...
  • 哎,虽然自己熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~...
  • transient作用及使用方法,官方解释为:Variables may be marked transient to indicate that they are not part of the persistent state of an object.我们都知道一个对象只要实现了Serilizable接口,这个对象就...
  • java——什么是transient关键字

    千次阅读 2020-10-20 11:55:26
    1、transient关键字 transient关键字只能修饰变量,而不能修饰方法和类。 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 2、应用场景 (1)一些安全性的信息,比如...
  • serializable和transient关键字作用

    千次阅读 2018-06-28 19:15:22
    2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。 3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。也可以...
  • transient作用和使用方法: 我们知道对象实现了 serilizable 就可以被序列化,我们不必关系具体序列化的过程,只要实现了这个接口,这个类的所有属性和方法都会自动的序列化 在实际的开发过程中,为了安全起见,...
  • Java中transient关键字的详细总结

    万次阅读 多人点赞 2018-06-14 22:15:12
    一、概要介绍Java中的transient关键字,transient是短暂的意思。对于transient 修饰的成员变量,在类实例的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的...
  • 本文章向大家介绍Java transient关键字的使用方法和实例,包括的知识点有transient的作用、transient使用小结、transient使用细节,需要的朋友可以参考一下
  • transient关键字

    2021-11-02 10:27:51
    java中的关键字transient,这篇文章你再也不发愁了...这篇文章就是去深入分析一下transient关键字。 先给出这篇文章的大致脉络 首先,介绍了transient的基本概念和基本用法、然后,介绍深入分析一下transie
  • 关于transient关键字 举个例子 参考资料 先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义; Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列...
  • transient关键字 当一个对象被序列化的时候,被transient修饰的变量不参与序列化和反序列化。 transient关键字一般在实现了Serializable接口的类中使用,用于将变量从序列化过程中排除。 volatile关键字 被...
  • 它的作用就是把这个字段修饰的对象生命周期仅存于调用者的内存中而不会写到磁盘里持久化,所谓的序列化就是把对象转变为可读的字节码文件,字节码文件才能被字节码执行引擎执行,最终存在JVM中 为什么ArrayList要加...
  • 主要介绍了Java中的transient关键字介绍,需要的朋友可以参考下
  • 有关volatile关键字和transient关键字 (1)volatile关键字['vɑlətl]的作用 让变量每次在使用的时候,都从主存中取,而不是从各个线程的“工作内存”。 也就是说,volatile变量对于每次使用,线程都能得到当前...
  • 为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。简而言...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,500
精华内容 17,400
关键字:

transient关键字的作用

友情链接: Convert.rar