演習課題「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