誰かが私に何InputStream
を説明しますかOutputStream
?
InputStream
との両方の使用例について混乱していますOutputStream
。
説明に合わせてコードのスニペットも含めることができれば、それは素晴らしいことです. ありがとう!
誰かが私に何InputStream
を説明しますかOutputStream
?
InputStream
との両方の使用例について混乱していますOutputStream
。
説明に合わせてコードのスニペットも含めることができれば、それは素晴らしいことです. ありがとう!
InputStream
andの目的は、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();
}
}
}
}
このプログラムは、バイト ストリームを使用してxanadu.txtファイルをoutagain.txtにコピーし、一度に 1 バイトずつ書き込みます。
Byte Streams のラッパーである高度な Character ストリームの詳細については、この 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();
OutputStream は、書き込み出力を表す抽象クラスです。多くの異なる OutputStream クラスがあり、特定のもの (画面、ファイル、バイト配列、ネットワーク接続など) に書き出されます。InputStream クラスは同じものにアクセスしますが、それらからデータを読み取ります。
以下は、 FileOutputStream と FileInputStream を使用してデータをファイルに書き込み、それを読み戻す良い基本的な例です。