Java 9 で、InputStream に、public long transferTo(OutputStream out) という
なんとも横着なメソッドが追加されたが、
Java10 では、Reader にもこれに相当の
public long transferTo(Writer out) が追加された。。
try(FileInputStream in = new FileInputStream("a.png"); FileOutputStream out = new FileOutputStream("b.png")){ in.transferTo(out); }catch(IOException ex){ ex.printStackTrace(); } try(FileReader reader = new FileReader("a.png"); FileWriter out = new FileWriter("c.png")){ reader.transferTo(out); }catch(Exception ex){ ex.printStackTrace(); }
でも、FileReader の transferTo なんかおかしい。テキストファイルで使う分には問題ないが、
上のようにバイナリ系のファイルではエラーも吐かずに期待に反するものを出力する。
でもこれは当たり前なのかも知れない。Writer の write メソッドは、元々 character を書きだすものだからなのか。
そんな間違ったことを書いてしまうなら、Reader に transferTo が不要な気もする。
なんで、transferTo が、Java10 で Reader に追加されたんだろう。