java transient关键字用法

第一次接触到transient这个关键字,它的意思是瞬时的,从翻译过来的字面意思上就不难明白,用这个关键字的属性的值只是瞬时的,不是永久的,

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

就这些,做个备忘。继续加油学习。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值