web-dev-qa-db-ja.com

InputStreamとOutputstreamとは何ですか?なぜそしていつ使うのですか?

誰かが私にInputStreamOutputStreamが何であるかを説明しますか?

InputStreamOutputStreamの両方のユースケースについて混乱しています。

あなたの説明に沿って進むためのコードの断片も含めることができれば、それは素晴らしいことです。ありがとうございます。

267
Bohemian

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

InputStreamはあなたが読む多くのことに使われます。

OutputStreamはあなたが書く多くのことに使われます。

これがサンプルコードです。 InputStream instrOutputStream osstrが既に作成されていると仮定します。

int i;

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

instr.close();
osstr.close();
201
Chip Uni

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

86
Arne Deutsch

Javaチュートリアル から:

ストリームは一連のデータです。

プログラムは入力ストリームを使用して、ソースからデータを一度に1項目ずつ読み取ります。

enter image description here

プログラムは出力ストリームを使用して、宛先にデータを1つずつ書き込みます。

enter image description here

上記のデータソースとデータ送信先は、データを保持、生成、または消費するものなら何でもかまいません。明らかにこれにはディスクファイルが含まれますが、転送元または転送先は他のプログラムでもかまいません、周辺機器、ネットワークソケット、または配列

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を書くことでコピーします。一度に1バイト

このSE質問を見て、Byte Streamsの上にあるラッパーである高度なCharacterストリームについての詳細を知ってください。

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

29
Ravindra babu

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();
9
pstanton

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

これが 良い基本的な例 FileOutputStreamとFileInputStreamを使ってファイルにデータを書き込み、それから再び読み込むことです。

5
Kaleb Brasee

流れは、液体、空気、または気体の連続的な流れです。

Javaストリームは、送信元から送信先へのデータの流れです。転送元または転送先は、ディスク、メモリ、ソケット、またはその他のプログラムです。データは、バイト、文字、またはオブジェクトです。同じことがC#またはC++ストリームにも当てはまります。ジャワの流れのためのよい隠喩は蛇口から浴槽へ、そして後で排水へと流れる水です。

データはストリームの静的部分を表します。読み書きメソッドはストリームの動的部分を表します。

InputStreamはソースからのデータの流れを表し、OutputStreamは宛先へのデータの流れを表します。最後に、InputStreamOutputStreamは、Cファイルポインタなど、データへの低レベルアクセスを抽象化したものです。

3
Jan Bodnar

ストリーム:素人用語でストリームはデータであり、最も一般的なストリームはデータのバイナリ表現です。

入力ストリーム 注:ファイルまたは他のソースからデータを読み取っている場合、使用されるストリームは入力ストリームです。簡単に言うと、入力ストリームはデータを読み取るためのチャネルとして機能します。

出力ストリーム :ソース(ファイルなど)からデータを読み込んで処理したい場合は、まずデータを保存する必要があります。データを保存する手段は出力ストリームです。

2
Sher Mohammad

出力ストリームは一般にファイルやネットワークなどのような何らかのデータ送信先に関連しています。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");
    }
}
0
Deep Arora

入力ストリームと出力ストリーム

入力ストリーム

  • このストリームはファイルからデータを読み込むために使用されます。
  • オブジェクトはキーワードnewを使用して作成することができ、利用可能なコンストラクタにはいくつかの種類があります

  • 次のコンストラクタはファイル名を文字列として取り、ファイルを読み込むための入力ストリームオブジェクトを作成します。

    InputStream f = new FileInputStream("input.txt");

  • 次のコンストラクタは、ファイルを読み込んで入力ストリームオブジェクトを作成するためにファイルオブジェクトを受け取ります。まず、File()メソッドを使って次のようにファイルオブジェクトを作成します。

    File f = new File(“input.txt");

    InputStream f = new FileInputStream(f);

出力ストリーム

  • FileOutputStreamは、ファイルを作成してそこにデータを書き込むために使用されます。

  • 出力用に開く前に、ストリームがファイルを作成します(まだ存在しない場合)。

  • これは、FileOutputStreamオブジェクトを作成するために使用できる2つのコンストラクタです。

  • 次のコンストラクタは、ファイル名を文字列として取り、ファイルを書き込む入力ストリームオブジェクトを作成します。

    OutputStream f = new FileOutputStream(“output.txt")

  • 次のコンストラクタはファイルを受け取り、ファイルを書き込むための出力ストリームオブジェクトを作成します。まず、File()メソッドを使って次のようにファイルオブジェクトを作成します。

    File f = new File(“output.txt");

    OutputStream f = new FileOutputStream(f);

0