JAVA

자바 입출력 스트림

Stater 2019. 10. 18. 09:00

입출력 스트림이란?

네트워크에서 자료의 흐름이 물 같다라는 의미에서 유래 되었으며,

다양한 입출력 장치에 독립적으로 일관성 있는 입출력방식을 제공한다.

 

입출력이 구현되는 곳에서는 모두 I/O 스트림을 사용

예시) 키보드,파일 디스크, 메모리 등

 

입출력 스트림 구분은 어떻게 하는가?

I/O 대상기준 : 입력 스트림, 출력스트림

자료의 종류: 바이트 스트림, 문자 스트림

스트림의 기능 : 기반 스트림, 보조 스트림 

 

입출력 스트림과 출력 스트림

입력 스트림: 대상으로부터 자료를 읽어 들이는 스트림

출력 스트림: 대상으로 자료를 출력하는 스트림

 

스트림의 예

종료 예시
입력 스트림 FileInputStream,FileReader,BufferedInputStream,BufferedReader 등
출력 스트림 FileOutputStream,FileWriter,BufferedOutputStream,BufferedWriter 등

 

Stream->바이트 단위

 

reader,writer->문자 단위

 

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

 

바이트 단위 스트림: 바이트 단위로 자료를 읽고 씀(동영상,음악파일 등)

문자 단위 스트림 : 문자는 2바이트씩 처리 해야 함

 

 

스트림의 예시

종류 예시
바이트 스트림 FileInputStream, FileOutputStream,BufferedInputStream,BufferedOutputStream 등
문자 스트림 FileReader,FileWriter,(기반)BufferedReader,BufferedWriter(보조)

 

기반 스트림과 보조 스트림

- 기반 스트림: 대상에 직접 자료를 읽고 쓰는 기능의 스트림

- 보조 스트림: 직접 읽고 쓰는 기능은 없고 추가적인 기능을 제공해주는 스트림

                   기반 스트림이나 또 다른 보조 스트림을 생성자의 매개변수로 포함함

 

스트림 예시

종류 예시
기반스트림 FileReader,FileWriter,FileInputStream, FileOutputStream 등
보조스트림 BufferedInputStream,BufferedOutputStream ,BufferedReader,BufferedWriter 등

 

System.in

- 한 바이트씩 읽어 들임

- 한글과 같은 여러 바이트로 된 문자를 읽기 위해서는 InputStreamReader와 같은 보조 스트림을 사용해야함

 

 

package stream.inputstream;

import java.io.IOException;

public class SystemInTest {

	public static void main(String[] args) {

		System.out.println("입력:");
		
		try {
			int i =System.in.read();
			System.out.println(i);
			System.out.println((char)i);
		} catch (IOException e) {

			e.printStackTrace();
		}

	}

}

 한글을 읽기 위해서 보조스트림을 사용해서 아래와 같이 작성했다.

 보조스트림은 말 단어 뜻 처럼 혼자 사용할 수 없고  System.in 등과 함께 사용한다.

package stream.inputstream;

import java.io.IOException;
import java.io.InputStreamReader;

public class SystemInTest2 {

	public static void main(String[] args) {

		System.out.println("입력 후 '끝'이라고 쓰세요:");
		
		try {
			int i;
			InputStreamReader isr = new InputStreamReader(System.in);
			while((i=isr.read())!='끝') {		
			System.out.print((char)i);
			}
		} catch (IOException e) {

			e.printStackTrace();
		}

	}

}

 

Scanner 클래스

- java.util 패키지에 있는 입력 클래스

- 문자뿐 아니라 정수, 실수등 다양한 자료형을 읽을 수 있음

- 생성자가 다양하여 여러 소스로 부터 자료를 읽을 수 있음

생성자 설명
Scanner(File source) 파일을 매개변수로 받아 Scanner를 생성합니다.
Scanner(InputStreamSource) 바이트 스트림을 매개변수로 받아 Scanner를 생성합니다.
Scanner(String source) String을 매개변수로 받아 Scanner를 생성합니다.

 

Console 클래스

- System.in을 사용하지 않고 콘솔에서 표준 입출력이 가능

- 이클립스와는 연동되지 않음

- Console 클래스의 메서드

 

메서드 설명
String readLine() 문자열을 읽습니다.
char[] readPassword() 사용자에게 문자열을 보여 주지 않고 읽습니다.
Reader reader() Reader 클래스를 반환합니다.
PrintWriter writer() PrintWriter 클래스를 반환합니다.

콘솔테스트 소스

package stream.inputstream;

import java.io.Console;

public class ConsoleTest {

	public static void main(String[] args) {
		Console console = System.console();
		System.out.println("이름:");
		String name= console.readLine();
		System.out.println("비밀번호:");
		char[] password=console.readPassword();
		
		System.out.println(name);
		System.out.println(password);
	}
}

 

 

실행 후 화면

반응형

'JAVA' 카테고리의 다른 글

문자 단위 입출력 스트림  (0) 2019.10.20
바이트 단위 입출력 스트림  (0) 2019.10.19
Multi-Thread 프로그래밍  (0) 2019.10.17
예외처리  (0) 2019.10.17
스트림관련 코딩  (0) 2019.10.16