답변:
의 목표 InputStream
와 OutputStream
입력 및 출력 추상적 다른 방법이다 : 스트림 파일, 웹 페이지, 또는 화면이 문제가 아니다할지 여부를 지정합니다. 중요한 것은 스트림에서 정보를 받거나 해당 스트림으로 정보를 보내는 것입니다.
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 형식의 읽기 / 쓰기를위한 스트림이 있습니다).
로부터 자바 튜토리얼 :
스트림은 일련의 데이터입니다.
프로그램은 입력 스트림을 사용하여 한 번에 한 항목 씩 소스에서 데이터를 읽습니다.
프로그램은 출력 스트림을 사용하여 한 번에 한 항목 씩 대상에 데이터를 씁니다.
위에 표시된 데이터 소스 및 데이터 대상은 데이터를 보유, 생성 또는 소비하는 모든 것이 될 수 있습니다. 여기에는 디스크 파일 이 포함 되지만 소스 나 대상은 다른 프로그램, 주변 장치, 네트워크 소켓 또는 어레이 일 수도 있습니다.
오라클 튜토리얼의 샘플 코드 :
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 질문을 참조하십시오.
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();
close
항상 flush
es, no.
흐름은 액체, 공기 또는 가스의 연속 흐름입니다.
Java 스트림은 소스에서 대상으로의 데이터 흐름입니다. 소스 또는 대상은 디스크, 메모리, 소켓 또는 기타 프로그램 일 수 있습니다. 데이터는 바이트, 문자 또는 객체 일 수 있습니다. C # 또는 C ++ 스트림에도 동일하게 적용됩니다. 자바 스트림에 대한 좋은 은유는 수도꼭지에서 욕조로, 그리고 나중에 배수로 흐르는 물입니다.
데이터는 스트림의 정적 부분을 나타냅니다. read 및 write 메소드는 스트림의 동적 부분입니다.
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");
}
}