使用@Transient可以让字段不序列化---你知道吗?
下文笔者讲述@transient关键字在Java序列化中的用途---如下所示
java中transient关键字具有什么功能呢?
Java 序列化
我们都知道在对象的传输中,我们必须对对象进行序列化 然后才能进行传输 那么有时候,有些字段我们不想被序列化,那么此时该如何处理呢? 此时我们只需在字段上加入@Transient注解即可例:
import javax.persistence.Transient;
public class TestJava{
@Transient
private String info;
.....get set 方法 ......
}
transient关键字的功能
当对象序列化时,如果不想指定字段写入到目标文件中 此时我们就可以使用@transient注解阻止关键字变量持久化例:
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 TestClass implements Serializable {
private transient InputStream is;
private int majorVer;
private int minorVer;
TestClass(InputStream is) throws IOException {
System.out.println("TestClass(InputStream) 调用");
this.is = is;
DataInputStream dis;
if (is instanceof DataInputStream)
dis = (DataInputStream) is;
else
dis = 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 printInfo() {
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;
}
TestClass cl = new TestClass(new FileInputStream(args[0]));
System.out.printf("Minor version number: %d%n", cl.getMinorVer());
System.out.printf("Major version number: %d%n", cl.getMajorVer());
cl.printInfo();
try (FileOutputStream fos = new FileOutputStream("test.file");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(cl);
}
cl = null;
try (FileInputStream fis = new FileInputStream("test.file");
ObjectInputStream ois = new ObjectInputStream(fis)) {
System.out.println();
cl = (TestClass) ois.readObject();
System.out.printf("Minor version number: %d%n", cl.getMinorVer());
System.out.printf("Major version number: %d%n", cl.getMajorVer());
cl.printInfo();
} catch (ClassNotFoundException cnfe) {
System.err.println(cnfe.getMessage());
}
}
}
相关阅读:java中transient关键字具有什么功能呢?
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


