java中transient关键字学习记录
2017-07-22 12:37
253 查看
一、transient关键字的作用
1、为了数据安全,避免序列化和反序列化。
解释:
当对象被序列化时,被transient关键字修饰的变量不会被序列化到目标文件;
当对象从序列化文件重构对象时(反序列化过程),被transient字段修饰的变量不会被恢复。
2、代码解释:详细解释都在注释上写着
注意:运行main函数时,参数添加方式是:点击Run AS->Run Configurations->Arguments,在 Arguments 的 Program arguments 输入IO文件的路径即可
知识来源:http://www.importnew.com/12611.html
知识来源:http://blog.csdn.net/wohyd/article/details/54922842
加入了我个人的理解,如果有错或者别的意见请联系我,一起学习。
1、为了数据安全,避免序列化和反序列化。
解释:
当对象被序列化时,被transient关键字修饰的变量不会被序列化到目标文件;
当对象从序列化文件重构对象时(反序列化过程),被transient字段修饰的变量不会被恢复。
2、代码解释:详细解释都在注释上写着
注意:运行main函数时,参数添加方式是:点击Run AS->Run Configurations->Arguments,在 Arguments 的 Program arguments 输入IO文件的路径即可
import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class ClassLib implements Serializable { private static final long serialVersionUID = 78987656781L; // 这个字段如果用做序列化时,必须要加transient的,不然就会报错(java.io.NotSerializableException),因为InputStream没有实现可序列化的接口 private transient InputStream is; // 在反序列化时,将无法恢复原来值 pri a424 vate transient int majorVer; // 以下两个字段加不加 transient关键字都不会参与序列化和反序列化,因为他是类变量 private transient static int minorVer; private static transient final int sf = 110; // 当变量被static修饰后,transient就失效了,这也是上线说的因为类变量的原因,被final修饰是起作用的 private final transient Logger log = LoggerFactory.getLogger(ClassLib.class); private static final ClassLib LIB = new ClassLib(); public ClassLib() { } ClassLib(InputStream is) throws IOException { System.out.println("ClassLib(InputStream) called"); this.is = is; DataInputStream dis; if (is instanceof DataInputStream) { dis = (DataInputStream) is; } else { dis = new DataInputStream(is); } // 这段代码是参数必须是".class"文件,去掉后就没有此限制了 // if (dis.readInt() != 0xcafebabe) { // throw new IOException("not a *.class file"); // } minorVer = dis.readShort(); majorVer = dis.readShort(); } int getMajorVer() { return majorVer; } int getMinorVer() { return minorVer; } int getSf() { return sf; } Logger getLog() { return log; } ClassLib getLib() { return LIB; } void showIS() { System.out.println(is); } } public class TransDemo { public static void main(String[] args) throws IOException { if (args.length != 1) { System.err.println("usage: java TransDemo classfile"); return; } ClassLib cl = new ClassLib(new FileInputStream(args[0])); // 序列化之前的数据显示 System.out.printf("Minor version number: %d%n", cl.getMinorVer()); System.out.printf("Major version number: %d%n", cl.getMajorVer()); System.out.printf("SF version number: %d%n", cl.getSf()); System.out.println("Log " + cl.getLog()); System.out.println("Lib " + cl.getLib()); cl.showIS(); // 开始序列化到 x.ser文件 try (FileOutputStream fos = new FileOutputStream("x.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(cl); } cl = null; // 开始反序列化 try (FileInputStream fis = new FileInputStream("x.ser"); ObjectInputStream ois = new ObjectInputStream(fis)) { System.out.println(); cl = (ClassLib) ois.readObject(); // 输出反序列化的结果 System.out.printf("Minor version number: %d%n", cl.getMinorVer()); System.out.printf("Major version number: %d%n", cl.getMajorVer()); System.out.printf("SF version number: %d%n", cl.getSf()); System.out.println("Log " + cl.getLog()); System.out.println("Lib " + cl.getLib()); cl.showIS(); } catch (ClassNotFoundException cnfe) { System.err.println(cnfe.getMessage()); } } }
知识来源:http://www.importnew.com/12611.html
知识来源:http://blog.csdn.net/wohyd/article/details/54922842
加入了我个人的理解,如果有错或者别的意见请联系我,一起学习。
相关文章推荐
- java学习(1).static,volatile,transient,final等关键字
- java学习(2).static,`volatile`,transient,final等关键字
- Java学习记录(五)super关键字的用法
- Java transient关键字学习
- Java----再学习-----transient关键字
- java学习——序列化与 Transient 关键字
- Java关键字之native,strictfp,transient,volatile
- Java 学习笔记 (11) - final 关键字
- Java中对象的串行化(Serialization)和transient关键字
- Java中final关键字学习笔记
- Java关键字之native,strictfp,transient,volatile
- 从Delphi向Java的转变,准备记录java的学习过程
- java关键字Transient
- Java中的transient,volatile和strictfp关键字
- java关键字Transient
- Java Media Framework 基础教程(学习JMF中,看到好的中文教程,在这里记录下来)
- Java不常用的关键字介绍 native,strictfp,transient,volatile
- Java中对象的串行化(Serialization)和transient关键字
- java中的volatile和transient关键字
- 学习笔记:Java中的transient