ポイントというか心にとまったことのアウトプットです。
※個人的な重要度のバイアスがかかっているので、「べつにいいかー」と思ってたりすることはメモしてません。
※手を動かして理解したことなど、間違いを含む可能性があります。
※手元の環境は断りがなければ基本はjava 7 をIntelliJ IDEA Ultimate on OSX で動かしてます。
「ファイルとネットワーク」
- I/Oストリーム java7以降はtry-with-resourceを使う(close忘れを防ぐ)
- IOExceptionは検査例外。java8では実行時例外のUncheckedIOExcepionがあるので、必要に応じてそれを使う
- バイトI/Oストリーム:InputStream、OutputStream
- ファイルの読み書きは4キロバイト以上の単位で行う
- 標準入出力は、java.lang.Systemのクラスフィールド(in, out, err)で扱うことができる(Unix依存)
- java.io.Console
System.cnsole()
でシングルトンを取得可能 - 文字I/Oストリーム:Reader、Writer
- 文字コードがデフォルトロケールでよければFileReaderとFileWriter。明示的にロケールしているする場合はInputStreamReader、OutputStreamWriter
- バイトI/Oストリームから 文字I/Oストリームへの変換
- バッファリング:1バイト・1文字ずつでアクセスするのは低速なためまとめて読み込み・書き込みする
- 基本的にバッファリングI/Oストリームを利用するべき。
- 出力用のバッファリングI/Oストリームは遅延対策のため、強制的に出力するflushメソッドが使える
- ランダムアクセス:ファイルの任意の位置を読み書き
- RandomAccessFileと、Filechannelがある。同等
- ByteArrayOutputStream:配列(固定長)ではなく可変長で扱いたい場合。
- java.nio.file.Path(java.io.Fileと等価), java.nio.file.Pathes
- java.nio.file.Filesユーティリティクラスがとても便利そう
- ☆要補足
- java.nio.file.WatchServiceは指定ディレクトリのファイル変更を感知できる
- ☆要補足
- I/Oストリームをストリーム(パイプライン)処理が可能
- ☆要補足