IO は、単純なファイルの読み取りであっても、サーバー ポートの監視であっても、Java IO パッケージの複雑な IO 基本クラスに直面する場合に使用される機能です。 InputStream
を選択するべきですか? Buffer
を InputStream
に追加する必要がありますか? ?コード>?アプリケーションのシナリオに応じて適切なクラス ライブラリを選択する方法は、多くのプログラマーが直面する問題です。ここでは、Java IO パッケージでよく使用されるクラス ライブラリを、その構成構造、機能的特徴、適用可能なシナリオなどを含めて整理しました。その後の使用では、ニーズに応じて最適な IO クラスをすばやく簡単に選択できますInputStream
还是应该选择Reader
,应该为InputStream
增加一个Buffer
吗?如何根据应用场景选择合适的类库是摆在很多代码人员面前的一个难题,这里我将Java IO包里的常用类库做了一个梳理,包括它们的组织结构,功能特性,适用场景等,以方便后续使用时能方便快捷的根据需求选取最合适的IO类
根据解析图,从大的层面可以IO进行两个维度的划分:
数据类型,即:字符 or 字节,类上对应于Writer/Reader
or OutputStream/InputStream
操作类型,即:读取(输入) or 写入(输出),类上对应于Reader/InputStream
or Writer/OutputStream
Java IO的所有操作都无外乎这两种维度四大主类的扩展,大部分比较简单,下面对于稍微难理解以及值得注意的点进行单独说明
Java IO大量使用了Decorator模式,所以,一般在使用IO类库的时候都是采用Decorator的调用方式:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
在Java IO中,无论是字符的读与写还是字节的读与写,基本都是一一对应的,换句话说,有一个特定读的类,一般就会有一个特定写的类,把握这一点,可以起到化繁为简的作用,如FileInputStream
和FileOutputStream
就分别对应于文件的读和写;PipedInputStream
和PipedOutputStream
分别对应于管道数据的读和写
如何区分读 or 写,这是一个经常会困扰新手的问题,这里我提供一个简单的区分方式:以你当前运行的程序作为基准(即调用IO的程序),数据从程序传至其它地方则为写(输出),数据从其它地方传至程序则为读(输入);如将程序产生的数据存放至日志文件中,那么就是写,从端口中取得数据并在程序中进行处理,则是读
根据要执行的动作以及目标数据类型,同时结合使用场景选择合适的IO类进行组装,注意上面一句话其实涉及到三个步骤:
执行的动作,即是要读还是要写
数据类型,即是字节还是字符,有的时候还需要字符与字节的转换(如OutputStreamWriter
Writer/Reader
または OutputStream/InputStream
に対応する文字またはバイト>Reader/InputStream
または Writer/OutputStream
に対応しますFileInputStream
と FileOutputStream
は、それぞれ PipedInputStream に対応します。 code> と PipedOutputStream
は、それぞれパイプ データの読み取りと書き込みに対応します🎜🎜🎜🎜読み取りと書き込みを区別する方法、これは初心者がよく悩む問題です。ここでは、簡単に区別する方法を示します。現在実行中のプログラムを使用する プログラムはベンチマーク (つまり、IO を呼び出すプログラム) として使用され、プログラムから他の場所にデータが転送される場合は書き込み (出力) され、他の場所からデータが転送される場合はそのデータが書き込まれます。たとえば、プログラムによって生成されたデータはログ ファイルに保存され、その後書き込み、ポートからデータを取得してプログラム内で処理され、その後 🎜🎜🎜🎜OutputStreamWriter
など)。データをネットワーク上またはメモリに (通常はバイト形式で) 保存する必要がある場合、またはファイルの書き込み時にテキスト ファイル自体が文字エンコードされます。一般的には文字形式ですが、写真、ビデオ、その他のファイルの場合はバイトのみを使用できます🎜🎜 🎜🎜使用シナリオは、最初に、ファイル操作などの明らかなシナリオを考慮する必要があります。次に、ファイルの書き込み操作がより頻繁になるかどうかなど、パフォーマンスを考慮する必要があります。そうする場合は、ファイルを開いて操作するのが非常に非効率な方法であるため、BufferedWriter を介してカプセル化することをお勧めします。毎回少量のデータを書き込みます🎜🎜🎜🎜🎜まとめ🎜🎜この記事は主に基本的なIOクラスを簡単にまとめたものですIOの基本的な概念とIO基本クラスライブラリの使い方について整理して解説しています。もちろん、この記事にはすべての IO 実装クラスがリストされているわけではありません。興味のある学生は、Java ドキュメントやソース コードを自分で確認することもできます。 、Java によって提供される基本的なクラス ライブラリはニーズを満たすのに十分です。さらに、Java は 1.4 以降、NIO、つまり、元の IO 使用シナリオとは多少異なります: No Blocking IO を導入しました。以上がJava で IO を始めるための簡単な紹介 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。