『Effective Java 第3版』と『Java Puzzlers』ー パズル41ー [Effective Java 第3版]
『Effective Java 第3版』で最初に言及されているのは、パズル41の解答です。パズル41は、以下の通りです。
パズル41 フィールドとストリーム(Field and Stream)言及されているのは、このパズルの解答として書かれていた
次のメソッドは、1つのファイルを他のファイルへコピーし、I/Oエラーが発生しても、生成したすべてのストリームをクローズするように設計されていました。残念ながら、常にそのようには動作しません。なぜ動作しないのでしょうか? 修正することができますか?
static void copy(String src, String dest) throws IOException { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(src); out = new FileOutputStream(dest); byte[] buf = new byte[1024]; int n; while ((n = in.read(buf)) > 0) out.write(buf, 0, n); } finally { if (in != null) in.close(); if (out != null) out.close(); } }
finally
節のコードです。この解答も間違っています。何が間違っているか分かりますか?『Effective Java 第3版』の「項目9 try-finally よりもtry-with-resources を選ぶ」に解説されています。} finally { if (in != null) { try { in.close(); } catch (IOException ex) { // closeが失敗しても、できることはない } } if (out != null) { try { out.close(); } catch (IOException ex) { // 再度、closeが失敗しても、できることはない } } }
2018-10-15 06:30
コメント(0)