Dart の File について調べてみた

DartでFileについて調べてみた。Dart Editor をダウンロードすれば、Dart SDK が同梱されているので、便利だ。ここに含まれるDartプログラムを参照すれば、大体どういう構造になっているかがわかる。

まず、dart-sdk/lib/io/runtime/file.dart を見ると、Fileはインターフェイスになっています。サポートしているメソッドはAPIリファレンスに記載されているとおりなので、実際の実装をみてみることにします。

実装は dart-sdk/lib/io/runtime/file_impl.dart にあります。デフォルトの実装が_Fileクラスであることがわかります。また、_FileInputStreamクラスは、_BaseDataInputStream を拡張していることがわかります。ファイルI/Oについてはファイルをopenしてから確実にcloseする方法が気になるのですが、プログラムコードをざっと眺めて見たところ、処理をする前にエラーハンドラを登録しておくことがポイントのようです。Dartでは、「try { } catch (final e) { } finally { } 」といった try文が使えるので、これで確実にcloseすれば良いと思いますが、基本ライブラリの方では、あまり使っていないように見えました(ざっとしか見てないので勘違いかも)。_FileInputStreamクラスの_readDataFromFile()メソッドを見ると、ハンドラへ関数を登録して、その中で close 処理をしているので、finallyの出番があまりないのかもしれません。

ここで、_FileInputStream の中で使われている_clientErrorHandlerが何か気になったのですが、コードを見ると_BaseDataInputStreamに宣言されていそうでした。それで、このクラスを探したところ、dart-sdk/lib/io/runtime/input_stream.dart あたりにあるのかと思ったら、dart-sdk/lib/io/runtime/stream_util.dart の方にありました。「Function _clientErrorHandler;」と宣言されていました。

こうやって見ていくと、Dartプログラムの勉強にもなりますし、面白いですね。

同じタグの記事: Dart
同じタグの記事: Linux
同じカテゴリの記事: Program