java transient 关键字和Serializable接口、Externalizable接口
来源:互联网 发布:网络玄学是什么意思 编辑:程序博客网 时间:2024/05/21 14:49
应用场景1:Serializable
java 可以使用 Serializable接口来实现对象的可序列化,并且可以使用IO流对其进行操作。
在实现Serializable接口之后,默认是序列化所有的属性,但是有时有些信息,我们不想其被序列化,比如银行卡密码,如何实现可以选择性的序列化,就需要transient关键字。
比如:
private transient String password;
示例代码:
import java.io.*;class Users implements Serializable{ private String username; private transient String password; public Users(String username,String password){ this.username=username; this.password=password; } public String getUsername(){ return this.username; } public String getPassword(){ return this.password; } public String toString(){ return "name="+this.username+" "+"password="+this.password; }}public class ObjectWriteandRead{ public static String ObjectFilename="users.txt"; public static void main(String[]args){ Users user=new Users("Tom","123"); try{ File file=new File(ObjectFilename); file.createNewFile(); FileOutputStream fileoutputstream = new FileOutputStream(file); ObjectOutputStream objectoutputstream = new ObjectOutputStream(fileoutputstream); objectoutputstream.writeObject(user); objectoutputstream.flush(); objectoutputstream.close(); fileoutputstream.close(); FileInputStream fileinputstream = new FileInputStream(file); ObjectInputStream objectinputstream = new ObjectInputStream(fileinputstream); Users userinput = (Users) objectinputstream.readObject(); objectinputstream.close(); fileinputstream.close(); System.out.println(userinput.toString()); }catch(IOException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); } }}
输出结果:
可以看到此时password为null
但是使用了transient关键字就一定不能序列化了吗?
应用场景2:Externalizable
如果在Externalizable接口的 writeExternal和readExternal方法中,手动指定序列化和反序列化属性则,不管是不是有transient关键字,都可以被序列化。
示例代码:
import java.io.*;class Users implements Externalizable { private String username; private transient String password; public Users(){ } public Users(String username,String password){ this.username=username; this.password=password; } public String getUsername(){ return this.username; } public String getPassword(){ return this.password; } public String toString(){ return "name="+this.username+" "+"password="+this.password; } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(this.username); out.writeObject(this.password); System.out.println("自定义序列化过程"); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { this.username= (String) in.readObject(); this.password= (String) in.readObject(); System.out.println("自定义反序列化"); } }public class ObjectWriteandRead{ public static String ObjectFilename="users.txt"; public static void main(String[]args){ Users user=new Users("Tom","123"); try{ File file=new File(ObjectFilename); file.createNewFile(); FileOutputStream fileoutputstream = new FileOutputStream(file); ObjectOutputStream objectoutputstream = new ObjectOutputStream(fileoutputstream); objectoutputstream.writeObject(user); objectoutputstream.flush(); objectoutputstream.close(); fileoutputstream.close(); FileInputStream fileinputstream = new FileInputStream(file); ObjectInputStream objectinputstream = new ObjectInputStream(fileinputstream); Users userinput = (Users) objectinputstream.readObject(); objectinputstream.close(); fileinputstream.close(); System.out.println(userinput.toString()); }catch(IOException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); } }}
输出结果:
阅读全文
1 0
- java transient 关键字和Serializable接口、Externalizable接口
- 09_ObjectIO,transient关键字(透明的),Serializable序列化接口和 Externalizable
- Java transient Serializable Externalizable 关键字使用
- serializable接口以及关键字 transient
- 序列化--Serializable接口和Externalizable接口
- 对象的序列化实现Serializable 接口和Externalizable接口
- Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口
- 序列化接口:Serializable/Externalizable
- Serializable接口与Externalizable接口区别
- Java IO操作——对象序列化(Serializable接口、ObjectOutputStream、以及与Externalizable接口的用法和区别)
- Java中的Externalizable接口
- Java中的serialize接口与transient关键字
- Java中的serialize接口与transient关键字
- 序列化的两种方法:Serializable 接口和 Externalizable接口
- IO流之对象序列化(Serializable接口和Externalizable接口)
- Serializable Externalizable transient singleton readRsolve()
- Java中Serializable接口和Cloneable接口
- java Externalizable序列化接口
- servicemix远程调试
- Redis 快速入门指南
- Java导出Excel
- maven下配置ojdbc包
- 金融反作弊中的设备指纹
- java transient 关键字和Serializable接口、Externalizable接口
- Ubuntu16.04 Apache+mysql+php+phpmyadmin环境搭建
- 获取json中data的数据
- PowerPivot的DAX函数实战
- JAVA中重写equals()方法的同时要重写hashcode()方法
- macvtap xml配置
- JavaScript技巧45招
- springboot JPA项目部署JBOSS出错
- Scala 详解 含Java中的正则匹配 eclipse集成scala插件