ホームページ  >  記事  >  Java  >  Java で IO を始めるための簡単な紹介 (図)

Java で IO を始めるための簡単な紹介 (図)

黄舟
黄舟オリジナル
2017-09-26 10:08:502251ブラウズ

全体の構造

IO は、単純なファイルの読み取りであっても、サーバー ポートの監視であっても、Java IO パッケージの複雑な IO 基本クラスに直面する場合に使用される機能です。 InputStream を選択するべきですか? BufferInputStream に追加する必要がありますか? ?コード>?アプリケーションのシナリオに応じて適切なクラス ライブラリを選択する方法は、多くのプログラマーが直面する問題です。ここでは、Java IO パッケージでよく使用されるクラス ライブラリを、その構成構造、機能的特徴、適用可能なシナリオなどを含めて整理しました。その後の使用では、ニーズに応じて最適な IO クラスをすばやく簡単に選択できますInputStream还是应该选择Reader,应该为InputStream增加一个Buffer吗?如何根据应用场景选择合适的类库是摆在很多代码人员面前的一个难题,这里我将Java IO包里的常用类库做了一个梳理,包括它们的组织结构,功能特性,适用场景等,以方便后续使用时能方便快捷的根据需求选取最合适的IO类

Java で IO を始めるための簡単な紹介 (図)

根据解析图,从大的层面可以IO进行两个维度的划分:

  1. 数据类型,即:字符 or 字节,类上对应于Writer/Reader or OutputStream/InputStream

  2. 操作类型,即:读取(输入) or 写入(输出),类上对应于Reader/InputStream or Writer/OutputStream

使用技巧

Java IO的所有操作都无外乎这两种维度四大主类的扩展,大部分比较简单,下面对于稍微难理解以及值得注意的点进行单独说明

  1. Java IO大量使用了Decorator模式,所以,一般在使用IO类库的时候都是采用Decorator的调用方式:

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
  1. 在Java IO中,无论是字符的读与写还是字节的读与写,基本都是一一对应的,换句话说,有一个特定读的类,一般就会有一个特定写的类,把握这一点,可以起到化繁为简的作用,如FileInputStreamFileOutputStream就分别对应于文件的读和写;PipedInputStreamPipedOutputStream分别对应于管道数据的读和写

  2. 如何区分读 or 写,这是一个经常会困扰新手的问题,这里我提供一个简单的区分方式:以你当前运行的程序作为基准(即调用IO的程序),数据从程序传至其它地方则为写(输出),数据从其它地方传至程序则为读(输入);如将程序产生的数据存放至日志文件中,那么就是写,从端口中取得数据并在程序中进行处理,则是读

Java で IO を始めるための簡単な紹介 (図)

  1. 根据要执行的动作以及目标数据类型,同时结合使用场景选择合适的IO类进行组装,注意上面一句话其实涉及到三个步骤:

  • 执行的动作,即是要读还是要写

  • 数据类型,即是字节还是字符,有的时候还需要字符与字节的转换(如OutputStreamWriter

    Java で IO を始めるための簡単な紹介 (図)

  • 解析図によると、IO は 1 次元から 2 次元に分割できます。大レベル:
  • データ型、つまり: Writer/Reader または OutputStream/InputStreamに対応する文字またはバイト>

操作タイプ、つまり: read (入力) または write (出力)、クラスは Reader/InputStream または Writer/OutputStream に対応します

🎜使用上のヒント 🎜🎜 Java IO のすべての操作は、これら 2 つの次元の 4 つの主要なクラスの拡張にすぎません。そのほとんどは比較的単純です。少しわかりにくい点や注目すべき点については、以下で個別に説明します🎜
    🎜🎜Java IO は Decorator モードを広範囲に使用するため、一般に IO クラス ライブラリを使用する場合は Decorator 呼び出しメソッドが使用されます: 🎜🎜🎜rrreee
      🎜🎜 Java IO では、文字の読み書きもバイトの読み書きも、基本的には 1 対 1 に対応します。 つまり、特定の読み取りクラスがあれば、通常は対応します。たとえば、FileInputStreamFileOutputStream は、それぞれ PipedInputStream に対応します。 code> と PipedOutputStream は、それぞれパイプ データの読み取りと書き込みに対応します🎜🎜🎜🎜読み取りと書き込みを区別する方法、これは初心者がよく悩む問題です。ここでは、簡単に区別する方法を示します。現在実行中のプログラムを使用する プログラムはベンチマーク (つまり、IO を呼び出すプログラム) として使用され、プログラムから他の場所にデータが転送される場合は書き込み (出力) され、他の場所からデータが転送される場合はそのデータが書き込まれます。たとえば、プログラムによって生成されたデータはログ ファイルに保存され、その後書き込み、ポートからデータを取得してプログラム内で処理され、その後 🎜🎜🎜Java で IO を始めるための簡単な紹介 (図)🎜
        🎜🎜実行するアクションとターゲットデータの種類に応じて、使用シナリオに基づいてアセンブリに適切な IO クラスを選択することに注意してください。実際には 3 つのステップが必要です: 🎜🎜
    🎜🎜 実行されるアクションは、🎜🎜🎜🎜 データ型、つまりバイトまたは文字の読み取りまたは書き込みです。場合によっては、文字とバイトを変換する (OutputStreamWriter など)。データをネットワーク上またはメモリに (通常はバイト形式で) 保存する必要がある場合、またはファイルの書き込み時にテキスト ファイル自体が文字エンコードされます。一般的には文字形式ですが、写真、ビデオ、その他のファイルの場合はバイトのみを使用できます🎜🎜 🎜🎜使用シナリオは、最初に、ファイル操作などの明らかなシナリオを考慮する必要があります。次に、ファイルの書き込み操作がより頻繁になるかどうかなど、パフォーマンスを考慮する必要があります。そうする場合は、ファイルを開いて操作するのが非常に非効率な方法であるため、BufferedWriter を介してカプセル化することをお勧めします。毎回少量のデータを書き込みます🎜🎜🎜🎜🎜まとめ🎜🎜この記事は主に基本的なIOクラスを簡単にまとめたものですIOの基本的な概念とIO基本クラスライブラリの使い方について整理して解説しています。もちろん、この記事にはすべての IO 実装クラスがリストされているわけではありません。興味のある学生は、Java ドキュメントやソース コードを自分で確認することもできます。 、Java によって提供される基本的なクラス ライブラリはニーズを満たすのに十分です。さらに、Java は 1.4 以降、NIO、つまり、元の IO 使用シナリオとは多少異なります: No Blocking IO を導入しました。

以上がJava で IO を始めるための簡単な紹介 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。