Java、多くの現代言語と同様プログラミング、データ入力ストリームの実装をサポートします。 Javaでは、InputStreamはバイトストリームの基本クラスです。このクラスは抽象クラスです。つまり、プログラムのプロセスでは、そのインスタンスを作成できません。ただし、ioパッケージには、InputStreamの機能を継承および拡張する多くのクラスがあります。このクラスをコードで使用するには、java.io.InputStreamパッケージからインポートする必要があります。次に、InputStreamクラスが提供する基本機能と、それを実装するメインクラスを見ていきます。
InputStreamクラスのメソッド
詳細な研究を始める前にInputStreamクラスのメソッドの場合、CloseableおよびAutoCloseableインターフェースを実装することに注意してください。 Closeableインターフェイスは、ストリームでの作業が終了したら、閉じる必要があることを示しています。これは、close()メソッドを使用して行われます。 InputStreamクラスのほとんどのメソッドはエラーが発生した場合にIOExceptionをスローするため、すべての操作はtryブロックで実行する必要があり、close()メソッドはfinallyブロックに配置する必要があります。
AutoCloseableインターフェイスが大幅に削減これは、close()メソッドを自動的に起動し、コードにfinallyブロックを追加しないためです。 Javaの7番目以降のバージョンを使用する場合、InputStreamをいわゆるtry with resourcesに配置して、スレッドを閉じるためのすべての操作を処理できます。
InputStreamクラスの基本的なメソッドを検討してください。
- int available()-読み取り可能なバイト数を返します。
- int read()-リソースから現在のバイトを取得し、整数表現で返します。すべてのバイトが読み取られた場合、-1を返します。
- int read(byte [] buffer)-使用可能なバイトを読み取りますバイト型の配列として指定されたバッファ(読み込まれたバイト数は指定されたバッファのサイズに等しく、読み込むことができるバイト数を返します。利用可能なすべてのバイトが読み込まれた場合、-1を返します)。
- int read(バイト[]バッファー、intオフセット、intバイト数)-前のメソッドをオーバーロードしますが、同じことを行いますが、「オフセット」で示された位置から、「バイト数」で指定されただけ読み取ります。
- ロングスキップ(長いバイト数)-指定されたバイト数をスキップし、スキップされた実際のバイト数を返します。
InputStreamは、さまざまなソースとデータ型で動作するように設計されたいくつかのクラスによって実装されます。以下は継承ツリーです。
ファイルを読む
ファイルから情報を読み取るためのバイトストリームFileInputStreamクラスによって実装されます。バイトを読み取るためにファイルを開くには、このクラスのインスタンスを作成し、その名前をコンストラクターに引数として渡せば十分です。渡された名前のファイルが存在しない場合、FileNotFoundExceptionタイプの例外がスローされます。
FileInputStreamはInputStreamの継承であるため、ファイルを開くことに成功した場合、上記のメソッドを使用して作業を実行します。
プリミティブデータ型の読み取り
で説明した前の例文字として解釈できるバイト値。しかし、整数、小数、または論理値を読み取る必要がある場合はどうでしょうか?これを行うために、Javaでは、InputStreamはDataInputStreamクラスによって間接的に拡張されます。このクラスはInputStreamのラッパーであり、コンストラクターへの引数として作成されたときに渡されます。この種類のストリームは、バイナリ形式でデータを読み取ります。
DataInputStreamは、プリミティブデータ型を読み取るためのDataInputインターフェイスとそのメソッドも実装します。以下は、これらのメソッドのリストです。
メソッドの名前はそれ自体を表しています-それぞれが特定のタイプのデータを読み取るように設計されています。
バッファリングされた入力ストリーム
バッファリングされたデータ読み取りストリームが実装されます。JavaのBufferedInputStreamクラス。 InputStreamはこのクラスによってラップされます。このクラスは、ストリームをバッファで補完します。これにより、1バイトではなく数バイトを同時に読み取ることができます。これにより、操作の生産性を大幅に向上させることができます。 BufferedInputStreamはInputStreamの間接的な子孫であり、したがって、上記のすべてのメソッドを継承します。
このクラスには2つのコンストラクターがあります。
- BufferedInputStream(InputStream入力ストリーム);
- BufferedInputStream(InputStream入力ストリーム、intバッファーサイズ)
コンストラクタのシグネチャから、最初のバッファサイズはデフォルトのバッファサイズを設定し、2番目のバッファサイズは手動で設定できることがわかります。
結論
InputStreamの主要な実装を調べました。受信したバイトを文字列に変換する必要がある場合は、 残念ながら、Java InputStream to String()はオーバーロードされていないため、Apache CommonsライブラリのIOUtilsなどの特別なユーティリティを使用する必要があります。