java transient关键字用法
2015-11-01 23:35
501 查看
第一次接触到transient这个关键字,它的意思是瞬时的,从翻译过来的字面意思上就不难明白,用这个关键字的属性的值只是瞬时的,不是永久的,
transient一般用的最多的就是在java 类序列化的时候,
如果类中某一属性加上了transient这一关键字,那么这个属性在序列化时,只是瞬时的,当再被反序列化回来的时候,它的值就不在了,
这也是出于某种安全上面的设计。
当时查这个关键字的时候,在csdn上有看到一篇文章,作者也有写例子,
但是我用作者那种方式写的时候,程序是报错的,错误如下:
是为什么呢,因为我写入文件的流与读出的流不一样,
下面就贴出我测试通过的代码:
控制台输出结果如下:
就这些,做个备忘。继续加油学习。
transient一般用的最多的就是在java 类序列化的时候,
如果类中某一属性加上了transient这一关键字,那么这个属性在序列化时,只是瞬时的,当再被反序列化回来的时候,它的值就不在了,
这也是出于某种安全上面的设计。
当时查这个关键字的时候,在csdn上有看到一篇文章,作者也有写例子,
但是我用作者那种方式写的时候,程序是报错的,错误如下:
java.io.StreamCorruptedException: invalid stream header: 3173756E at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at com.sunny.url.SerializableTest.main(SerializableTest.java:71)
是为什么呢,因为我写入文件的流与读出的流不一样,
下面就贴出我测试通过的代码:
package com.sunny.url; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * 序列化与序列化测试 * @author Sunny * @date 2015-11-1下午11:33:14 * @anotion 这是…… */ public class SerializableTest2 { public static void main(String[] args) { Sunny sunny = new Sunny("Sunny","999999"); System.out.println("序列化之前: "); System.out.println("username: " + sunny.username); System.err.println("password: " + sunny.passwd); try { ObjectOutputStream os = new ObjectOutputStream( new FileOutputStream("C:\\Documents and Settings\\Administrator\\桌面\\sunny.txt")); os.writeObject(sunny); os.flush(); os.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { ObjectInputStream is = new ObjectInputStream(new FileInputStream( "C:\\Documents and Settings\\Administrator\\桌面\\sunny.txt")); sunny = (Sunny) is.readObject(); is.close(); System.out.println("\n序列化之后: "); System.out.println("username: " + sunny.username); System.err.println("password: " + sunny.passwd); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } class Sunny implements Serializable { /** * */ private static final long serialVersionUID = 1L; protected String username; protected transient String passwd; protected Sunny(String userName,String pwd){ this.username = userName; this.passwd = pwd; } }
控制台输出结果如下:
序列化之前: username: Sunny password: 999999 序列化之后: username: Sunny password: null
就这些,做个备忘。继续加油学习。
相关文章推荐
- Struts2 XML配置详解
- Spring MVC配置详解
- Struts2的拦截器总结
- Struts2拦截器介绍及说明
- SpringMVC拦截器(资源和权限管理)
- Spring MVC中拦截器小结
- Spring面试问题
- javadoc时候乱码-编码 GBK 的不可映射字符
- Struts2面试题
- spring面试题
- 配置spring的事务管理
- Java的学习笔记
- Java enum的用法详解
- springmvc+json
- Java对象 json之间的转换(json-lib)
- struts2知识点
- spring事务管理
- 从头认识java-6.5 向上转型
- 从头认识java-6.5 向上转型
- SpringMVC拦截器(资源和权限管理)