JAva transientキーワードの使い方
3099 ワード
初めて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("
: ");
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
これだけ、メモをしてください.勉強を続ける.