演習課題「ObjectOutputStreamクラス と Serializable を使用してみよう」
現在、ObjectOutputStream
クラスのコンストラクタを使い、/home/ubuntu/java-file/files/out.txt
に、Testb
クラスのオブジェクトを書き込もうとしています。/home/ubuntu/java-file/source/jp.paiza.file/jp/paiza/file/Testa.java
において、Testb
クラスのオブジェクトを書き込むよう、ObjectOutputStream
クラスのコンストラクタに対し、引数にFileOutputStream
クラスのインスタンスを使用するようコードを修正してください。また、Testb
クラスのオブジェクトを書き込むには、writeObject
メソッドを使います。引数にはTestb
クラスのインスタンスであるtb
を適用してください。
ただし、これだけではNotSerializableException
が発生してしまいます。そのため、/home/ubuntu/java-file/source/jp.paiza.file/jp/paiza/file/Testb.java
における、Testb
クラスにSerializable
を実装してください。
修正後、コンパイルと実行を行い結果を確認してください。
なお、コンパイルコマンドについて理解できていれば、以下のコンパイルコマンドをコピーして利用してください。
$ javac -d classes/jp.paiza.file -p classes source/jp.paiza.file/module-info.java source/jp.paiza.file/jp/paiza/file/*.java
また、実行コマンドについて理解できていれば、以下の実行コマンドをコピーして利用してください。
$ java -p classes --module jp.paiza.file/jp.paiza.file.Testa
演習課題「ObjectInputStreamクラス を使用してみよう」
現在、ObjectInputStream
クラスのコンストラクタを使い、/home/ubuntu/java-file/files/out.txt
に、Testb
クラスのオブジェクトを書き込み、その内容を復元し、デシリアライズしようとしています。/home/ubuntu/java-file/source/jp.paiza.file/jp/paiza/file/Testa.java
において、Testb
クラスのオブジェクトを書き込む処理に続けて、デシリアライズの処理を完成させてください。
まず、ObjectInputStream
クラスのコンストラクタに対し、引数にFileInputStream
クラスのインスタンスを使用するようコードを修正してください。続いて、eadObject
メソッドを使いオブジェクトを復元してください。その際に、忘れずTestb
型へのキャストをしてください。最後に変数tb
が出力されるようを修正してください。修正後、コンパイルと実行を行い結果を確認してください。
なお、コンパイルコマンドについて理解できていれば、以下のコンパイルコマンドをコピーして利用してください。
$ javac -d classes/jp.paiza.file -p classes source/jp.paiza.file/module-info.java source/jp.paiza.file/jp/paiza/file/*.java
また、実行コマンドについて理解できていれば、以下の実行コマンドをコピーして利用してください。
$ java -p classes --module jp.paiza.file/jp.paiza.file.Testa
期待する出力値
Testa
jp.paiza.file.B@xxxxxxxx
※ただし、jp.paiza.file.B@xxxxxxxx の値は環境によって異なります
演習課題「transient を使用してみよう」
現在、transient
の有無による変数の違いを確かめようとしています。/home/ubuntu/java-file/source/jp.paiza.file/jp/paiza/file/Testb.java
において、transient
を付与しない変数job1
と、transient
を付与する変数job2
を宣言してください。
その後、/home/ubuntu/java-file/source/jp.paiza.file/jp/paiza/file/Testa.java
において、Testb
クラスのインスタンスtb
のインスタンス変数job1
には文字列勇者
を、インスタンス変数job2
には文字列戦士
を代入してください。
その際に、それぞれの変数を出力するよう修正し、修正後、コンパイルと実行を行い結果が正しく出力されれば完了です。
なお、コンパイルコマンドについて理解できていれば、以下のコンパイルコマンドをコピーして利用してください。
$ javac -d classes/jp.paiza.file -p classes source/jp.paiza.file/module-info.java source/jp.paiza.file/jp/paiza/file/*.java
また、実行コマンドについて理解できていれば、以下の実行コマンドをコピーして利用してください。
$ java -p classes --module jp.paiza.file/jp.paiza.file.Testa
期待する出力値
Testa
勇者
null
#06:シリアライズ
このチャプターでは、シリアライズ、transient修飾子について学習します。
インタフェースSerializable
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/io/Serializable.html
クラスObjectOutputStream
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/io/ObjectOutputStream.html
クラスObjectInputStream
https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/io/ObjectInputStream.html
コンパイルjavac -d classes/jp.paiza.file -p classes source/jp.paiza.file/module-info.java source/jp.paiza.file/jp/paiza/file/*.java
実行java -p classes --module jp.paiza.file/jp.paiza.file.A