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

StackOverflow https://stackoverflow.com/questions/1830698

문제

누군가 나에게 무엇을 설명합니다 InputStream 그리고 OutputStream 이다?

나는 두 가지 모두의 사용 사례에 대해 혼란스러워합니다 InputStream 그리고 OutputStream.

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

도움이 되었습니까?

해결책

의 목표 InputStream 그리고 OutputStream 스트림이 파일, 웹 페이지 또는 화면이 중요하지 않든 입력 및 출력을 추출하는 것입니다. 중요한 것은 스트림으로부터 정보를 받거나 해당 스트림에 정보를 보내는 것입니다.)

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

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

다음은 샘플 코드입니다. 그것은 InputStream instr 그리고 OutputStream osstr 이미 만들어졌습니다.

int i;

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

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

다른 팁

입력 스트림은 읽기에 사용됩니다. 그들은 서로 다른 유형의 소스에서 모든 다른 유형의 데이터를 읽거나 쓸 수 있도록 장식 자로 연결됩니다.

예를 들어, 원시 데이터를 파일에 쓸 수 있습니다.

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

로부터 자바 튜토리얼:

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

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

enter image description here

프로그램은 출력 스트림을 사용하여 대상에 데이터를 작성하고 시간에 하나의 항목을 작성합니다.

enter image description here

위의 데이터 소스 및 데이터 대상은 데이터를 보유, 생성 또는 소비하는 것이 될 수 있습니다. 분명히 여기에는 포함됩니다 디스크 파일, 그러나 소스 나 목적지도 가능합니다 다른 프로그램, 주변 장치, 네트워크 소켓 또는 배열.

견본 암호 Oracle Tutorial :

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 , 한 번에 하나의 바이트를 작성함으로써

바이트 스트림 위에 래퍼 인 고급 캐릭터 스트림에 대한 자세한 내용을 알아 보려면이 SE 질문을 살펴보십시오.

바이트 스트림과 문자 스트림

입력 스트림에서 읽고 출력 스트림에 씁니다.

예를 들어, 파일을 복사하려고한다고 가정 해보십시오. 소스 파일에서 읽을 수있는 fileInputStream과 새 파일에 쓸 수있는 fileOutputStream을 작성합니다.

데이터가 문자 스트림 인 경우, 원하는 경우 출력 스트림 대신 입력 스트림 대신 파일 리더를 사용할 수 있습니다.

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은 쓰기 출력을 나타내는 추상 클래스입니다. 다양한 출력 스트림 클래스가 있으며, 화면, 파일, 바이트 어레이, 네트워크 연결 등)와 같은 특정 사항에 기록합니다. InputStream 클래스는 동일한 것에 액세스하지만 데이터를 읽습니다.

여기에 있습니다 좋은 기본 예입니다 파일에 데이터를 작성하기 위해 FileOutputStream 및 FileInputStream을 사용하여 다시 읽습니다.

스트림은 액체, 공기 또는 가스의 지속적인 흐름입니다.

Java Stream은 소스 또는 대상으로 데이터의 흐름입니다. 소스 또는 대상은 디스크, 메모리, 소켓 또는 기타 프로그램 일 수 있습니다. 데이터는 바이트, 문자 또는 객체 일 수 있습니다. 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");
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top