InputStream
日本語 | 入力流れ |
英語 | input stream |
ふりがな | いんぷっとすとりーむ |
フリガナ | インプットストリーム |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.InputStream。
ストリームクラス。全てのバイト入力ストリームクラスのスーパークラスである。
バイト入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスはOutputStreamクラスである。
全てのバイト入力ストリームクラスのスーパークラス。
言い換えると、InputStreamクラスのサブクラスはバイト入力ストリームクラスである、ということになる。
そういったスーパークラスとしての役目だけ持つため、このクラスを直接使用することはない。このクラスのサブクラスを使用するか、もしくはサブクラスを作成して使用する。
そもそも抽象クラスであるため、インスタンスを作成することはできない。
基本的には、「入力元」となるクラスはこのInputStreamクラスのサブクラスとし、「中継ぎ」となるクラスはFilterInputStreamクラスのサブクラスとする。
InputStreamクラスのサブクラスを作成する場合、まず「本当の入力元」を用意する。「本当の入力元」は、byte配列であったり、ファイルであったり、ソケットであったりする。そういった「一列に並べられたbyte型データ」を「本当の入力元」とする。
他のバイト入力ストリームクラスを「入力元」としてもいいが、それであればInputStreamクラスではなくFileInputStreamクラスのサブクラスとした方がいいだろう。
InputStreamクラスは抽象クラスであり、read()メソッドが抽象メソッドであるため、サブクラスは必ずread()メソッドをオーバーライドする必要がある。
read()メソッドでは、「本当の入力元」から1バイト取得し返すよう実装する。取得したbyte型のデータは、「バイトデータとしては同じ」ようになるようint型にキャストし返す。つまり、取得した値が-1(0xFF)であれば、それをint型としては255(0xFF)になるようキャストして返す。read()メソッドはあくまで「バイトデータ」を返すメソッドだからである。
read()メソッドでは、バイトストリームの最後に達した場合に「-1」を返す。
InputStreamクラスのその他のメソッドも、必要であればオーバーライドする。
特にclose()メソッドは「終了処理」を行うメソッドであり、ファイルやソケットといった、最後に「閉じる」処理が必要な「本当の入力元」の場合には必ずclose()メソッドをオーバーライドし、使用時にはfinallyで呼び出すようにする。
ストリームクラス。全てのバイト入力ストリームクラスのスーパークラスである。
バイト入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスはOutputStreamクラスである。
全てのバイト入力ストリームクラスのスーパークラス。
言い換えると、InputStreamクラスのサブクラスはバイト入力ストリームクラスである、ということになる。
そういったスーパークラスとしての役目だけ持つため、このクラスを直接使用することはない。このクラスのサブクラスを使用するか、もしくはサブクラスを作成して使用する。
そもそも抽象クラスであるため、インスタンスを作成することはできない。
基本的には、「入力元」となるクラスはこのInputStreamクラスのサブクラスとし、「中継ぎ」となるクラスはFilterInputStreamクラスのサブクラスとする。
InputStreamクラスのサブクラスを作成する場合、まず「本当の入力元」を用意する。「本当の入力元」は、byte配列であったり、ファイルであったり、ソケットであったりする。そういった「一列に並べられたbyte型データ」を「本当の入力元」とする。
他のバイト入力ストリームクラスを「入力元」としてもいいが、それであればInputStreamクラスではなくFileInputStreamクラスのサブクラスとした方がいいだろう。
InputStreamクラスは抽象クラスであり、read()メソッドが抽象メソッドであるため、サブクラスは必ずread()メソッドをオーバーライドする必要がある。
read()メソッドでは、「本当の入力元」から1バイト取得し返すよう実装する。取得したbyte型のデータは、「バイトデータとしては同じ」ようになるようint型にキャストし返す。つまり、取得した値が-1(0xFF)であれば、それをint型としては255(0xFF)になるようキャストして返す。read()メソッドはあくまで「バイトデータ」を返すメソッドだからである。
read()メソッドでは、バイトストリームの最後に達した場合に「-1」を返す。
InputStreamクラスのその他のメソッドも、必要であればオーバーライドする。
特にclose()メソッドは「終了処理」を行うメソッドであり、ファイルやソケットといった、最後に「閉じる」処理が必要な「本当の入力元」の場合には必ずclose()メソッドをオーバーライドし、使用時にはfinallyで呼び出すようにする。
参考サイト
// Sample.java
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
NormalInputStream normalInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// NormalInputStreamクラスを作ります。
// 本当の「入力元」はないので、単独で作ります。
normalInputStream = new NormalInputStream();
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( normalInputStream );
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// NormalInputStream#read() : 1
// 0x1 ( 1 )
// NormalInputStream#read() : 2
// 0x2 ( 2 )
// NormalInputStream#read() : 3
// 0x3 ( 3 )
// NormalInputStream#read() : 4
// このように、pushbackInputStreamのread()メソッドを呼ぶと、
// normalInputStreamのread()メソッドを呼び出します。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalInputStream != null )
{
normalInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalInputStreamクラス。
* InputStreamクラスのサブクラスです。
*/
class NormalInputStream extends InputStream
{
// カウンター。
private int counter = 1;
/**
* read()メソッド。
* InputStreamクラスのread()メソッドをオーバーライドしたものです。
* このクラスを利用するバイト入力ストリームクラスの
* read()メソッドから呼び出されます。
*/
public int read() throws IOException
{
System.out.println( "NormalInputStream#read() : " + counter );
// カウンターの最大値を3にします。
if( counter > 3 )
{
// 3を超えたら「最後」の印として-1を返します。
return -1;
}
// カウンターの数を返します。
// 通常は、こればbyte型の配列だったり、ファイルだったり
// するわけです。
int i = counter;
++counter;
return i;
}
}
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
NormalInputStream normalInputStream = null;
PushbackInputStream pushbackInputStream = null;
try
{
// NormalInputStreamクラスを作ります。
// 本当の「入力元」はないので、単独で作ります。
normalInputStream = new NormalInputStream();
// このクラスを対象とするPushbackInputStreamクラスを用意します。
pushbackInputStream = new PushbackInputStream( normalInputStream );
while( true )
{
// 1バイト取得します。
int i = pushbackInputStream.read();
if( i == -1 )
{
// -1が返されてきたら終わりです。
break;
}
// 出力します。
System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" );
}
// NormalInputStream#read() : 1
// 0x1 ( 1 )
// NormalInputStream#read() : 2
// 0x2 ( 2 )
// NormalInputStream#read() : 3
// 0x3 ( 3 )
// NormalInputStream#read() : 4
// このように、pushbackInputStreamのread()メソッドを呼ぶと、
// normalInputStreamのread()メソッドを呼び出します。
}
catch( IOException e )
{
// 読み込みに失敗した際に、read()メソッドが
// IOException例外を投げます。
e.printStackTrace();
}
finally
{
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( pushbackInputStream != null )
{
pushbackInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
// 処理が終わったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。
try
{
if( normalInputStream != null )
{
normalInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* NormalInputStreamクラス。
* InputStreamクラスのサブクラスです。
*/
class NormalInputStream extends InputStream
{
// カウンター。
private int counter = 1;
/**
* read()メソッド。
* InputStreamクラスのread()メソッドをオーバーライドしたものです。
* このクラスを利用するバイト入力ストリームクラスの
* read()メソッドから呼び出されます。
*/
public int read() throws IOException
{
System.out.println( "NormalInputStream#read() : " + counter );
// カウンターの最大値を3にします。
if( counter > 3 )
{
// 3を超えたら「最後」の印として-1を返します。
return -1;
}
// カウンターの数を返します。
// 通常は、こればbyte型の配列だったり、ファイルだったり
// するわけです。
int i = counter;
++counter;
return i;
}
}
// Sample.java import java.io.InputStream; import java.io.PushbackInputStream; import java.io.IOException; public class Sample { public static void main( String[] args ) { NormalInputStream normalInputStream = null; PushbackInputStream pushbackInputStream = null; try { // NormalInputStreamクラスを作ります。 // 本当の「入力元」はないので、単独で作ります。 normalInputStream = new NormalInputStream(); // このクラスを対象とするPushbackInputStreamクラスを用意します。 pushbackInputStream = new PushbackInputStream( normalInputStream ); while( true ) { // 1バイト取得します。 int i = pushbackInputStream.read(); if( i == -1 ) { // -1が返されてきたら終わりです。 break; } // 出力します。 System.out.println( "0x" + Integer.toHexString( i ) + " ( " + i + " )" ); } // NormalInputStream#read() : 1 // 0x1 ( 1 ) // NormalInputStream#read() : 2 // 0x2 ( 2 ) // NormalInputStream#read() : 3 // 0x3 ( 3 ) // NormalInputStream#read() : 4 // このように、pushbackInputStreamのread()メソッドを呼ぶと、 // normalInputStreamのread()メソッドを呼び出します。 } catch( IOException e ) { // 読み込みに失敗した際に、read()メソッドが // IOException例外を投げます。 e.printStackTrace(); } finally { // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( pushbackInputStream != null ) { pushbackInputStream.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } // 処理が終わったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。 try { if( normalInputStream != null ) { normalInputStream.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } } } } /** * NormalInputStreamクラス。 * InputStreamクラスのサブクラスです。 */ class NormalInputStream extends InputStream { // カウンター。 private int counter = 1; /** * read()メソッド。 * InputStreamクラスのread()メソッドをオーバーライドしたものです。 * このクラスを利用するバイト入力ストリームクラスの * read()メソッドから呼び出されます。 */ public int read() throws IOException { System.out.println( "NormalInputStream#read() : " + counter ); // カウンターの最大値を3にします。 if( counter > 3 ) { // 3を超えたら「最後」の印として-1を返します。 return -1; } // カウンターの数を返します。 // 通常は、こればbyte型の配列だったり、ファイルだったり // するわけです。 int i = counter; ++counter; return i; } }
「みだし」に含まれているページ
「解説」に含まれているページ
- BufferedInputStream
- BufferedOutputStream
- ByteArrayInputStream
- DataInputStream
- DataOutputStream
- EOFException
- FileInputStream
- FileOutputStream
- FileReader
- FilterInputStream
- FilterOutputStream
- HttpURLConnection
- InputStream
- InputStreamReader
- java.io
- LineNumberInputStream
- ObjectInputStream
- ObjectOutputStream
- OutputStream
- OutputStreamWriter
- PipedInputStream
- PipedOutputStream
- PushbackInputStream
- SequenceInputStream
- Serializable
- StringBufferInputStream
- ZIP
- クライアント
- サーバー
- ストリーム
- ソケット
- バイト入力ストリーム
- バイト出力ストリーム
- バイナリーファイル
- 文字ストリーム
- 文字入力ストリーム
「サンプルプログラムとか」に含まれているページ
- 127.0.0.1
- BufferedInputStream
- ByteArrayInputStream
- DataInputStream
- DataOutputStream
- DOM
- DTD
- EOF
- EOFException
- FileInputStream
- FileNotFoundException
- FilterInputStream
- FilterOutputStream
- GET
- HEAD
- HTTP
- HttpURLConnection
- InputStream
- InputStreamReader
- IOException
- IPアドレス
- java.net.URL
- LineNumberInputStream
- localhost
- Node
- ObjectInputStream
- ObjectOutputStream
- PipedInputStream
- PipedOutputStream
- POST
- PushbackInputStream
- SequenceInputStream
- Serializable
- StringBufferInputStream
- TCP
- transient
- URI
- URL
- Xerces
- XML
- ZIP
- クライアント
- クライアントサーバーシステム
- サーバー
- ステートレス
- ソケット
- ドメイン名
- バイト入力ストリーム
- バイト出力ストリーム
- バイナリーファイル
- ブロックします
- プロパティファイル
- ホスト
- ポート番号
- リクエスト
- リクエストパラメーター
- リクエストヘッダー
- ルート
- レスポンス
- レスポンスヘッダー
- 改行文字
- 標準入出力
- 環境変数
- 直列化