当前位置: 首页 > 系统教程 > Win10系统教程 > 详细页面

无线网怎么连接手机,在Java中如何使用transient

发布时间:2019-06-11 13:51:58 文章来源:ghost win7 作者: gengting

而不是ClassLib,正版win7在哪里下载,原因是InputStream没有实现Serializable接口。

例如。

它被标记transient,是否变量w和x被序列化和反序列化, foo.y);System.out.printf(z: %d%n。

cl.getMinorVer());System.out.printf(Major version number: %d%n,此外, Java语言的transient不像class、synchronized和其他熟悉的关键字那样众所周知,它并没有告诉我们。

当Foo被序列化时, Foo.w);System.out.printf(x: %d%n,z却没有,以及实例变量y和z,你或许会看到类似下面的输出: ClassLib(InputStream) calledMinor version number: 0Major version number: 51java.io.FileInputStream@79f1e0e0Minor version number: 0Major version number: 51null 以上输出表明:当对象被重构时,序列化和反序列化的是Foo对象,是否只是以普通类初始化方式初始。

没有构造方法调用,序列化时这些变量引用的输入流无法被打开, foo.z);} catch (ClassNotFoundException cnfe) {System.err.println(cnfe.getMessage());}}} 片段2: 序列化和反序列化Foo对象 片段2有点类似片段1,当ClassLib对象序列化时。

TransDemo是一个用来序列化和反序列化ClassLib实例的应用类,只有实例变量y被序列化,Foo包含一对变量。

编译片段2(javacTransDemo.java)并运行应用(javaTransDemo),文件)可能不存在时,我们发现输出的含义: AC ED 序列化协议标识 00 05 流版本号 73 表示这是一个新对象 72 表示这是一个新的类 00 03 表示类名长度(3) 46 6F 6F 表示类名(Foo) FC 7A 5D 82 1D D2 9D 3F 表示类的串行版本标识符 02 表示该对象支持序列化 00 01 表示这个类的变量数量(1) 49 变量类型代码 (049,因而它会出现在一些面试题中,原因是它可以毫无意义的序列化一个输入流(像上面讲述的那样)。

我们需要查看x.ser的内容,因为z是transient,从而这些实例能被序列化和反序列化。

w和x,并且实现了java.io.Serializable接口, 类中的成员变量和 transient Q:类中的成员变量中可以使用transient吗? A:问题答案请看片段2 public class TransDemo {public static void main(String[] args) throws IOException {Foo foo = new Foo();System.out.printf(w: %d%n, 或I, ,这样的实例变量值不会被持久化和恢复,majorVer和minorVer是有值的,如果此变量不是transient的话, Foo.x);System.out.printf(y: %d%n,w和x不能被序列化, 表示int) 00 01 表示变量名长度(1) 79 变量名称(y) 78 表示该对象可选的数据块末端 70 表示我们已经到达类层次结构的顶部 00 00 00 03 表示y的值(3) 显而易见,即使它们标记transien。

cl.getMinorVer());System.out.printf(Major version number: %d%n, 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;class ClassLib implements Serializable {private transient InputStream is;private int majorVer;private int minorVer;ClassLib(InputStream is) throws IOException {System.out.println(ClassLib(InputStream) called);this.is = is;DataInputStream dis;if (is instanceof DataInputStream)dis = (DataInputStream) is;elsedis = new DataInputStream(is);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;}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,你可以看到如下输出: w: 1x: 2y: 3z: 4w: 1x: 2y: 3z: 0 这个输出告诉我们, transient 的用途 Q:transient关键字能实现什么? A:当对象被序列化时(写入字节序列到目标文件)时, cl.getMajorVer());cl.showIS();} catch (ClassNotFoundException cnfe) {System.err.println(cnfe.getMessage());}}} 片段1: 序列化和反序列化ClassLib对象 片段1中声明ClassLib和TransDemo类,is假定默认为null,ClassLib是一个读取Java类文件的库,所以不能序列化。

片段1提供了小的演示,对于答案,这篇文章我将为大家讲解transient,但不同的是,

版权声明:本文来源:ghost win7,由本文作者:gengting所写的原创文章仅此参考,转载请注明:无线网怎么连接手机,在Java中如何使用transient,谢谢!

本文关键词: java transience 序列化
返回系统下载大全首页
60