-
InputStream 과 OutputStream에 차이 !자바웹프로그래밍/JAVA 2024. 7. 24. 14:18728x90반응형
OutputStream과 InputStream은 Java의 I/O 시스템에서 데이터를 순차적으로 읽고 쓰는 데 사용되는 기본적인 스트림 클래스입니다. 이 두 클래스는 각각 출력과 입력에 대한 추상적인 개념을 제공합니다.
차이점
- 역할:
- InputStream: 데이터를 소스(파일, 네트워크, 메모리 등)에서 읽어 들입니다.
- OutputStream: 데이터를 대상(파일, 네트워크, 메모리 등)으로 씁니다.
- 메소드:
- InputStream: 주로 read 메서드를 사용하여 데이터를 읽습니다. 대표적인 메서드는 다음과 같습니다:
- int read(): 한 바이트를 읽고, 0에서 255 사이의 값을 반환하거나, 더 이상 데이터가 없으면 -1을 반환합니다.
- int read(byte[] b): 바이트 배열 b에 데이터를 읽습니다.
- int read(byte[] b, int off, int len): 바이트 배열 b의 off 위치부터 최대 len 바이트를 읽습니다.
- void close(): 스트림을 닫습니다.
- OutputStream: 주로 write 메서드를 사용하여 데이터를 씁니다. 대표적인 메서드는 다음과 같습니다:
- void write(int b): 한 바이트를 씁니다.
- void write(byte[] b): 바이트 배열 b의 모든 바이트를 씁니다.
- void write(byte[] b, int off, int len): 바이트 배열 b의 off 위치부터 len 바이트를 씁니다.
- void close(): 스트림을 닫습니다.
- InputStream: 주로 read 메서드를 사용하여 데이터를 읽습니다. 대표적인 메서드는 다음과 같습니다:
- 예외 처리: 두 클래스 모두 입출력 작업 중 발생할 수 있는 예외를 처리하기 위해 IOException을 던집니다.
예제
다음은 파일을 읽고 쓰기 위한 InputStream과 OutputStream의 실제 사용 예제입니다.
파일 쓰기 예제 (OutputStream 사용)
import java.io.FileOutputStream; import java.io.BufferedOutputStream; import java.io.IOException; public class OutputStreamExample { public static void main(String[] args) { String data = "Hello, World!"; try (FileOutputStream fos = new FileOutputStream("output.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos)) { bos.write(data.getBytes()); } catch (IOException e) { e.printStackTrace(); } } }
이 예제에서:
- FileOutputStream은 파일에 데이터를 쓰기 위한 기본 스트림입니다.
- BufferedOutputStream은 버퍼링을 통해 쓰기 성능을 향상시킵니다.
- data.getBytes()는 문자열 데이터를 바이트 배열로 변환합니다.
파일 읽기 예제 (InputStream 사용)
import java.io.FileInputStream; import java.io.BufferedInputStream; import java.io.IOException; public class InputStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("output.txt"); BufferedInputStream bis = new BufferedInputStream(fis)) { int data; while ((data = bis.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } }
이 예제에서:
- FileInputStream은 파일에서 데이터를 읽기 위한 기본 스트림입니다.
- BufferedInputStream은 버퍼링을 통해 읽기 성능을 향상시킵니다.
- bis.read()는 파일에서 한 바이트씩 읽어 들이며, 더 이상 읽을 데이터가 없으면 -1을 반환합니다.
요약
- **InputStream**은 데이터를 읽는 데 사용되고, **OutputStream**은 데이터를 쓰는 데 사용됩니다.
- InputStream의 주요 메서드는 read이고, OutputStream의 주요 메서드는 write입니다.
- 스트림을 사용할 때는 항상 예외 처리를 하고, 사용 후 스트림을 닫아야 합니다.
이와 같은 스트림 기반의 I/O는 Java에서 데이터를 효율적이고 일관되게 처리할 수 있도록 도와줍니다.
728x90반응형'자바웹프로그래밍 > JAVA' 카테고리의 다른 글
내부 스태틱 클래스(static nested class)를 사용하는 이유와 그 동작 방식 (0) 2024.07.25 BufferedOutputStream를 사용하면 성능이 좋아지는 이유 및 자세한 설명 with FileDescriptor (2) 2024.07.24 org.springframework.core.io.Resource란 무엇인가 !!? (0) 2024.07.15 JVM의 메모리 영역에 대한 이해와 예시와 reflection의 이해 (0) 2024.07.11 jvm 클래스 로더 작동방식 (0) 2024.07.11 - 역할: