JAva transientキーワードの使い方

3099 ワード

初めて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("
: "); 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

これだけ、メモをしてください.勉強を続ける.