回答:
の目的はInputStream
、OutputStream
入出力のさまざまな方法を抽象化することです。ストリームがファイルであるか、Webページであるか、画面であるかは関係ありません。重要なのは、ストリームから情報を受け取る(またはそのストリームに情報を送る)ことだけです。
InputStream
は、あなたが読んだ多くのことに使用されます。
OutputStream
はあなたが書く多くのことに使われます。
これがサンプルコードです。を想定してInputStream instr
おりOutputStream osstr
、すでに作成されています。
int i;
while ((i = instr.read()) != -1) {
osstr.write(i);
}
instr.close();
osstr.close();
InputStreamは読み取りに、OutputStreamは書き込みに使用されます。これらは互いにデコレータとして接続されているため、さまざまなタイプのソースからすべてのタイプのデータを読み書きできます。
たとえば、プリミティブデータをファイルに書き込むことができます。
File file = new File("C:/text.bin");
file.createNewFile();
DataOutputStream stream = new DataOutputStream(new FileOutputStream(file));
stream.writeBoolean(true);
stream.writeInt(1234);
stream.close();
書かれた内容を読むには:
File file = new File("C:/text.bin");
DataInputStream stream = new DataInputStream(new FileInputStream(file));
boolean isTrue = stream.readBoolean();
int value = stream.readInt();
stream.close();
System.out.printlin(isTrue + " " + value);
他のタイプのストリームを使用して、読み取り/書き込みを強化できます。たとえば、効率を上げるためにバッファを導入できます。
DataInputStream stream = new DataInputStream(
new BufferedInputStream(new FileInputStream(file)));
オブジェクトなどの他のデータを書き込むことができます。
MyClass myObject = new MyClass(); // MyClass have to implement Serializable
ObjectOutputStream stream = new ObjectOutputStream(
new FileOutputStream("C:/text.obj"));
stream.writeObject(myObject);
stream.close();
他のさまざまな入力ソースから読み取ることができます。
byte[] test = new byte[] {0, 0, 1, 0, 0, 0, 1, 1, 8, 9};
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(test));
int value0 = stream.readInt();
int value1 = stream.readInt();
byte value2 = stream.readByte();
byte value3 = stream.readByte();
stream.close();
System.out.println(value0 + " " + value1 + " " + value2 + " " + value3);
ほとんどの入力ストリームには、出力ストリームもあります。特別なものを読み書きするための独自のストリームを定義でき、複雑なものを読み込むための複雑なストリームがあります(たとえば、ZIP形式を読み書きするためのストリームがあります)。
Javaチュートリアルから:
ストリームは一連のデータです。
プログラムは、入力ストリームを使用して、一度に1項目ずつソースからデータを読み取ります。
プログラムは、出力ストリームを使用して、一度に1アイテムずつ宛先にデータを書き込みます。
上記のデータソースとデータ宛先は、データを保持、生成、または消費するものであれば何でもかまいません。明らかにこれにはディスクファイルが含まれますが、ソースまたは宛先は別のプログラム、周辺機器、ネットワークソケット、またはアレイにすることもできます。
Oracleチュートリアルのサンプルコード:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
このプログラムは、バイトストリームを使用して、一度に1バイトずつ書き込むことにより、xanadu.txtファイルをoutagain.txtにコピーします。
バイトストリームのラッパーである高度な文字ストリームの詳細については、このSEの質問をご覧ください。
InputStreamから読み取り、OutputStreamに書き込みます。
たとえば、ファイルをコピーするとします。ソースファイルから読み取るFileInputStreamと、新しいファイルに書き込むFileOutputStreamを作成します。
データが文字ストリームの場合、必要に応じて、InputStreamの代わりにFileReaderを使用し、OutputStreamの代わりにFileWriterを使用できます。
InputStream input = ... // many different types
OutputStream output = ... // many different types
byte[] buffer = new byte[1024];
int n = 0;
while ((n = input.read(buffer)) != -1)
output.write(buffer, 0, n);
input.close();
output.close();
close
常にflush
esなので、いいえ。
ストリームは、液体、空気、またはガスの連続的な流れです。
Javaストリームは、ソースから宛先へのデータの流れです。ソースまたは宛先は、ディスク、メモリ、ソケット、またはその他のプログラムです。データは、バイト、文字、またはオブジェクトです。同じことがC#またはC ++ストリームにも当てはまります。Javaストリームの優れたメタファーは、蛇口から浴槽に流れ込み、後で排水路に流れる水です。
データはストリームの静的な部分を表します。読み取りおよび書き込みメソッドは、ストリームの動的部分です。
InputStream
ソースからのデータのフローをOutputStream
表し、は宛先へのデータのフローを表します。最後に、InputStream
そしてOutputStream
そのようなCファイルポインタとしてデータへの低レベルのアクセスを抽象化しています。
出力ストリームは一般に、ファイルやネットワークなどの一部のデータ宛先に関連しています。Java出力ストリームでは、最終的にデータが書き込まれ、終了する宛先です
import java.io.printstream;
class PPrint {
static PPrintStream oout = new PPrintStream();
}
class PPrintStream {
void print(String str) {
System.out.println(str)
}
}
class outputstreamDemo {
public static void main(String args[]) {
System.out.println("hello world");
System.out.prinln("this is output stream demo");
}
}