回答編集履歴

1

ファイル名の拡張子についてアドバイスを書き漏らし追記するためと、表現を少し手直し。

2020/08/07 15:59

投稿

ironya
ironya

スコア454

test CHANGED
@@ -1,6 +1,8 @@
1
1
  問題は次の点にあります。
2
2
 
3
+
4
+
3
- 1つ目は、`bos` の `write` メソッドを使っている点です。
5
+ まずは、`bos` の `write` メソッドを使っている点です。
4
6
 
5
7
  ここは、 `gzos` の `write` メソッドを使いましょう。
6
8
 
@@ -8,9 +10,7 @@
8
10
 
9
11
 
10
12
 
11
- ついでに言うと、`System.out.println` で読み込んだ値を `char` 型にキャストして表示していますが、`FileInputStream` クラスの `read` メソッドはファイルから1バイトずつ読み込みますので、
12
-
13
- 複数バイトで表現される文字(漢字など)の場合、1バイト読むごとに `char` にキャストしてもまともな文字としては表示されません。1バイトで表現される文字であれば結果的にうまくいくのですが、論理的には考慮がかけたコードになっていると言えます。
13
+ ついでに言うと、`System.out.println` で読み込んだ値を `char` 型にキャストして表示していますが、`FileInputStream` クラスの `read` メソッドはファイルから1バイトずつ読み込みますので、複数バイトで表現される文字(漢字など)の場合、1バイト読むごとに `char` にキャストしてもまともな文字としては表示されません。1バイトで表現される文字であれば結果的にうまくいくのですが、論理的には考慮がかけたコードになっていると言えます。
14
14
 
15
15
 
16
16
 
@@ -18,9 +18,21 @@
18
18
 
19
19
 
20
20
 
21
+ 出力するファイル名の拡張子には `.gz` をつけると良いでしょう。
22
+
23
+ 展開ツールなどがファイルの圧縮形式を GZIP として扱ってくれます。
24
+
25
+ `.gz` をつけるときは`"~FileCopy2.txt.gz"` とすると、展開後に `~FileCopy2.txt` というファイル名になります。
26
+
27
+
28
+
29
+ なお、出来上がったファイルをテキストエディター等で、圧縮したまま開いてもまともに表示されないのでご注意を。
30
+
31
+
32
+
21
33
  最後に、 正常に処理できた時には、`gzos.close()` を実行しましょう。
22
34
 
23
- そうすることで `bos` の `flush` と `close` は不要でしょう
35
+ そうすることで `bos` の `flush` と `close` は不要というよりも、むしろ実行すべきはないと考えた方が良いです
24
36
 
25
37
  `GZIPOutputStream` の親クラス `DeflaterOutputStream` の `close` メソッドの Javadoc を見ると次のように書いてありますので、 `gzos` に対して `flush` は実行しなくて良いです。 (`GZIPOutputStream` は `close` メソッドをオーバーライド指定ないので、メソッドの使用を確認するには親クラスを見る必要があります。)
26
38