Unixでは標準出力への出力をすべて捨てる場合は/dev/nullにリダイレクトします。一方Windowsでは"nul"という名称のファイルにリダイレクトすることで同じことが可能です。したがってif文でプラットフォームに応じて異なるストリームを定義するようなコードを書けば対応できそうですが、せっかくJavaならプラットフォームに依存しないようスマートに書きたいものです。どうすればよいでしょう?
Unixでしか通用しない方法
OutputStream os0 = new FileOutputStream("/dev/null");
単に/dev/nullファイルに対するOutputStreamを作るだけです。しかしこれではJavaによるマルチプラットフォーム開発のメリットがなくなります。
汎用的な方法
そこで、これをより汎用的にするために、すべての書き込みを無視するOutputStreamを定義してしまうことにします。
OutputStream os1 = new OutputStream() { @Override public void write(int b) { } @Override public void write(byte[] b) { } @Override public void write(byte[] b, int off, int len) { } }
コメント