この記事では主に Java Advanced Tutorial で IO の基本を紹介します。これは、読み取りや書き込みなどの操作を含む、Java IO の基本的な紹介です。必要な方は参照してください。
コンピューターの最も重要な機能は次のとおりです。プロセスデータ。有用なコンピューター言語には、未処理のデータがプログラムに流入し、処理されたデータが流出するように、優れた IO 機能が必要です。
他の言語と比較して、Java の IO 関数は複雑です。他の言語では、多くの IO 関数 (ファイルの読み取り など) がカプセル化されており、1 行または 2 行のプログラムで実装できます。 Java では、プログラマはファイルの読み取りを実現するために複数のレベルの装飾を必要とすることがよくあります。
相対的な複雑さの利点は、IO の柔軟性です。 Java では、プログラマは IO プロセス全体を制御して、最適な IO メソッドを設計できます。以下でさらに詳しく見ていきます。
IO の例
以下は、デモンストレーションに使用したファイル file.txt です
Hello World! Hello Nerd!
最初にファイル読み取りの例を検討してみましょう:
import java.io.*; public class Test { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("file.txt")); String line = br.readLine(); while (line != null) { System.out.println(line); line = br.readLine(); } br.close(); } catch(IOException e) { System.out.println("IO Problem"); } } }
このプログラムには、try...catch...finally の Exception が含まれていますハンドラー。例外処理に関する Java 上級チュートリアルを参照してください
デコレータと関数の組み合わせ
IO をプログラムする鍵は、BufferedReader オブジェクトを作成することですbr:
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
作成プロセスでは、最初に FileReader オブジェクトを作成します。この機能は、ファイル「file.txt」からバイトストリームを読み取り、テキストストリームに変換することです。 Java では、標準のテキスト エンコーディングは Unicode です。 BufferedReader() は FileReader オブジェクトを受け取り、FileReader の機能を拡張し、新しい BufferedReader オブジェクトを作成します。このオブジェクトは、上記のファイル読み取りおよび変換機能に加えて、キャッシュ読み取り (バッファリング) 機能も提供します。最後に、br オブジェクトの readLine() メソッドを呼び出して、ファイルを 1 行ずつ読み取ることができます。
(キャッシュ読み取りとは、FileReaderによって読み取られたテキストストリームを保存するメモリ内の領域をキャッシュとして開くことです。キャッシュの内容が読み取られると(readLine()コマンドなど)、キャッシュは後続のテキストストリームをロードします。 )
BufferedReader() は、プリミティブ オブジェクトを受け取り、より複雑な関数を備えた装飾されたオブジェクトを返すデコレーターです。デコレータの利点は、さまざまなオブジェクトを装飾するために使用できることです。ここで変更しているのは、ファイルから読み取られたテキスト ストリームです。標準入力、ネットワーク送信ストリームなどの他のテキスト ストリームは、キャッシュされた読み取りを実現するために BufferedReader() によって変更できます。
次の図は、データが下から上に流れる br の仕組みを示しています:
上記の装飾プロセスは、Linux のテキスト フローの考え方に非常に似ています。 Linux では、関数のようなアプローチを使用してテキスト ストリームを処理し、渡します。 Javaではデコレータを使用します。ただし、モジュール化と機能の自由な組み合わせを実現するという目的は似ています。
その他の組み合わせ
実際、Java には豊富なデコレータが用意されています。 FileReader は、読み取りと変換の 2 つのステップを組み合わせ、エンコードに Unicode など、一般的に使用されるデフォルト設定を採用します。 FileInputStream + InputStreamReader の組み合わせを使用して FileReader を置き換えることができます。これにより、バイトの読み取りと変換の 2 つのステップが分離され、2 つのプロセスをより適切に制御できるようになります。
(もちろん、FileReader の方が使いやすいです。InputStreamReader は、FileInputStream を Unicode テキストを処理するための Reader に変換します)
矢印はデータ フローの方向を示します
ストリームの読み書きは 4 つの方向から行われます。基本クラス:InputStream、OutputStream、Reader、Writer。 InputStream と Reader は読み取り操作を処理し、OutputStream と Writer は書き込み操作を処理します。これらは両方とも java.io パッケージにあります。継承関係は次のとおりです。
java.io
さらに、IOException には次の派生クラスがあります。
IOException
Reader および Writer とその派生クラスは、Unicode テキストを処理します。ご覧のとおり、Buffered Reader、InputStreamReader、または FileReader。
InputStream および OutputStream とその派生クラスはバイト ストリームを処理します。コンピューター内のデータはバイト形式で考えることができるため、InputStream と OutputStream を使用してより広範囲のデータを処理できます。たとえば、次の組み合わせを使用して、圧縮ファイルに含まれるデータ (整数など) を読み取ることができます:
箭头表示数据流动方向
我们从压缩文件中读出字节流,然后解压缩,最终读出数据。
写入
写入(write)操作与读取操作相似。我们可以通过使用装饰,实现复杂的写入功能。这里是一个简单的写入文本的例子:
import java.io.*; public class Test { public static void main(String[] args) { try { String content = "Thank you for your fish."; File file = new File("new.txt"); // create the file if doesn't exists if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(content); bw.close(); } catch(IOException e) { System.out.println("IO Problem"); } } }
上面创建了file对象,用于处理文件路径。
总结
这里只是对Java IO的基本介绍。Java的IO相对比较复杂。Java程序员需要花一些时间来熟悉java.io中的类及其功能。
以上がJava 上級チュートリアルでの IO の基本の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。