312

誰かが私に何InputStreamを説明しますかOutputStream

InputStreamとの両方の使用例について混乱していますOutputStream

説明に合わせてコードのスニペットも含めることができれば、それは素晴らしいことです. ありがとう!

4

10 に答える 10

236

InputStreamandの目的は、OutputStream入力と出力のさまざまな方法を抽象化することです。ストリームがファイルであるか、Web ページであるか、画面であるかは重要ではありません。重要なのは、ストリームから情報を受け取る (またはそのストリームに情報を送信する) ことだけです。

InputStreamから読み取る多くのものに使用されます。

OutputStreamは、書き込み先の多くのものに使用されます。

ここにいくつかのサンプルコードがあります。とがすでに作成されていることを前提InputStream instrとしています。OutputStream osstr

int i;

while ((i = instr.read()) != -1) {
    osstr.write(i);
}

instr.close();
osstr.close();
于 2009-12-02T05:12:17.177 に答える
94

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 形式を読み書きするためのストリームがあります)。

于 2009-12-02T06:06:21.467 に答える
39

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 の質問をご覧ください。

バイトストリームと文字ストリーム

于 2016-03-28T11:55:04.497 に答える
9

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();
于 2009-12-02T04:51:48.033 に答える
5

OutputStream は、書き込み出力を表す抽象クラスです。多くの異なる OutputStream クラスがあり、特定のもの (画面、ファイル、バイト配列、ネットワーク接続など) に書き出されます。InputStream クラスは同じものにアクセスしますが、それらからデータを読み取ります。

以下は、 FileOutputStream と FileInputStream を使用してデータをファイルに書き込み、それを読み戻す良い基本的な例です。

于 2009-12-02T04:54:57.820 に答える