봄수의 연구실

Java의 입출력 스트림 - 🐥 카카오 테크 캠퍼스 본문

DEV/Java

Java의 입출력 스트림 - 🐥 카카오 테크 캠퍼스

berom 2023. 5. 3. 10:38

Java의 입출력 스트림


Java의 입/출력(I/O) 스트림은 파일, 키보드, 마우스, 네트워크 및 메모리와 같은 다양한 I/O 장치에서 데이터를 읽고 쓰는 일관된 방법을 제공합니다.

스트림은 일종의 추상적인 흐름이며, 관련 클래스가 많다
또한 예외처리를 많이 해야하기 때문에 배우는데 어려움이 있을 수 있다!

입출력 스트림 구분

  • 대상 기준 : 입력 스트림 / 출력 스트림
  • 자료의 종류 : 바이트 스트림 / 문자 스트림
  • 기능 : 기반 스트림 / 보조 스트림
    입력 스트림과 출력 스트림
  • 입력 스트림 : 대상으로부터 자료를 읽어 들이는 스트림
  • 출력 스트림 : 대상으로 자료를 출력하는 스트림
    바이트 단위 스트림과 문자 단위 스트림

    바이트 단위 스트림 : 동영상, 음악 파일, 실행 파일등의 자료를 읽고 쓸 때 사용
    문자 단위 스트림 : 바이트 단위로 자료를 처리하면 문자는 깨짐, 인코딩에 맞게 2바이트 이상으로 처리하도록 구현된 스트림

기반 스트림과 보조 스트림

기반 스트림 : 대상에 직접 자료를 읽고 쓰는 기능의 스트림
보조 스트림(래퍼 스트림) : 직접 읽고 쓰는 기능은 없이 추가적인 기능을 더해주는 스트림

  • 보조 스트림은 직접 읽고 쓰는 기능은 없으므로 항상 기반 스트림이나 또 다른 보조 스트림을 생성자의 매개 변수로 포함
  • 버퍼링을 해주거나 바이트를 읽은 것을 바꿔 주는 등이 그 예시입니다

스트림 분석 : System 클래스의 표준 입출력 멤버

public class System{ 
	public static PrintStream out; // 표준 출력 스트림
	public static InputStream in;  //표준 입력 스트림
	public static PrintStream err; // 표준 에러 출력 스트림
}

표준 입력 스트림 System.in은 입력을 문자로 읽기 위해 바이트 수준 스트림을 래핑하는 보조 스트림인 InputStreamReader 클래스의 인스턴스입니다.

표준 출력 스트림 System.out은 기본 바이트 수준 스트림에 형식이 지정된 텍스트 출력을 쓰기 위한 메서드를 제공하는 문자 수준 스트림인 PrintStream 클래스의 인스턴스

public class SystemInTest1 {
	public static void main(String[] args) {
		System.out.println("알파벳 하나를 쓰고 [Enter]를 누르세요");
		
		int i;
		try {
			i = System.in.read();
			System.out.println(i);
			System.out.println((char)i);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

System.out.println()이 바이트 수준 스트림이기 때문에 위의 코드에서 (char) i로 형태를 문자열로 변경하는 것을 볼 수 있다
또한, InputStreamReader 클래스는 바이트 스트림과 문자 스트림을 잇는, 즉 지정된 문자 인코딩을 사용하여 바이트를 문자로 변환합니다

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>