입력 스트림 및 출력 스트림이란 무엇입니까? 왜 그리고 언제 사용합니까?


290

누군가가 무엇을 나에게 설명 InputStream하고 OutputStream있습니까?

나는 모두에 대한 사용 사례에 대해 혼란 스러워요 InputStreamOutputStream.

설명과 함께 코드 스 니펫을 포함시킬 수 있다면 좋을 것입니다. 감사!

답변:


218

의 목표 InputStreamOutputStream입력 및 출력 추상적 다른 방법이다 : 스트림 파일, 웹 페이지, 또는 화면이 문제가 아니다할지 여부를 지정합니다. 중요한 것은 스트림에서 정보를 받거나 해당 스트림으로 정보를 보내는 것입니다.

InputStream 당신이 읽는 많은 것들에 사용됩니다.

OutputStream 당신이 쓰는 많은 것들에 사용됩니다.

샘플 코드는 다음과 같습니다. 그것은 가정합니다 InputStream instrOutputStream osstr이미 생성되었습니다

int i;

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

instr.close();
osstr.close();

67
"스트림"은 무엇입니까?
Koray Tugay 2016 년

55
@KorayTugay 스트림은 일반적으로 문자 집합으로 정의됩니다. 보다 정확하게 말하면 하나 이상의 비트 또는 문자를 스트림이라고합니다.
Gowtham Gopalakrishnan

14
둘 이상의 문자도 문자열입니다. 스트림과 문자열을 차별화하는 것은 무엇입니까?
Prajeet Shrestha

스트림은 문자가 아닌 0과 1이라고 생각합니다.
smilyface

93

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 형식의 읽기 / 쓰기를위한 스트림이 있습니다).


35

로부터 자바 튜토리얼 :

스트림은 일련의 데이터입니다.

프로그램은 입력 스트림을 사용하여 한 번에 한 항목 씩 소스에서 데이터를 읽습니다.

여기에 이미지 설명을 입력하십시오

프로그램은 출력 스트림을 사용하여 한 번에 한 항목 씩 대상에 데이터를 씁니다.

여기에 이미지 설명을 입력하십시오

위에 표시된 데이터 소스 및 데이터 대상은 데이터를 보유, 생성 또는 소비하는 모든 것이 될 수 있습니다. 여기에는 디스크 파일 이 포함 되지만 소스 나 대상은 다른 프로그램, 주변 장치, 네트워크 소켓 또는 어레이 일 수도 있습니다.

오라클 튜토리얼의 샘플 코드 :

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 바이트 씩 작성 하여 복사 합니다.

바이트 스트림 위에 래퍼 인 고급 문자 스트림에 대한 자세한 내용은이 SE 질문을 참조하십시오.

바이트 스트림 및 문자 스트림


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

3
close항상 flushes, no.
pstanton

5

OutputStream은 출력 작성을 나타내는 추상 클래스입니다. 많은 다른 OutputStream 클래스가 있으며 화면, 파일 또는 바이트 배열 또는 네트워크 연결 등과 같은 특정 항목에 기록합니다. InputStream 클래스는 동일한 것에 액세스하지만 데이터를 읽습니다.

다음은 FileOutputStream 및 FileInputStream을 사용하여 파일에 데이터를 쓴 다음 다시 읽어 오는 좋은 기본 예 입니다.


4

흐름은 액체, 공기 또는 가스의 연속 흐름입니다.

Java 스트림은 소스에서 대상으로의 데이터 흐름입니다. 소스 또는 대상은 디스크, 메모리, 소켓 또는 기타 프로그램 일 수 있습니다. 데이터는 바이트, 문자 또는 객체 일 수 있습니다. C # 또는 C ++ 스트림에도 동일하게 적용됩니다. 자바 스트림에 대한 좋은 은유는 수도꼭지에서 욕조로, 그리고 나중에 배수로 흐르는 물입니다.

데이터는 스트림의 정적 부분을 나타냅니다. read 및 write 메소드는 스트림의 동적 부분입니다.

InputStream는 소스로부터의 데이터 흐름을 OutputStream나타내고,는 목적지로의 데이터 흐름을 나타낸다. 마지막으로, InputStreamOutputStream같은 C 파일 포인터 같은 데이터에 대한 낮은 레벨의 액세스를 추상화입니다.


2

스트림 : 일반 용어로 스트림은 데이터이며, 가장 일반적인 스트림은 데이터의 이진 표현입니다.

입력 스트림 : 파일 또는 다른 소스에서 데이터를 읽는 경우 사용 된 스트림은 입력 스트림입니다. 간단히 말해서 입력 스트림은 데이터를 읽는 채널 역할을합니다.

출력 스트림 : 소스 (파일 등)에서 데이터를 읽고 처리하려면 먼저 데이터를 저장해야합니다. 데이터 저장 수단은 출력 스트림입니다.


0

출력 스트림은 일반적으로 파일이나 네트워크와 같은 일부 데이터 대상과 관련이 있습니다 .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");
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.