Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch14. 자바 입출력 (2) 본문

JAVA 문법

Ch14. 자바 입출력 (2)

밍응애 2021. 2. 16. 22:49

< 표준 입출력 >

* System 클래스의 표준 입출력 멤버

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

--> static 멤버이기 때문에 new System()하지 않고, System.out 식으로 가져다가 써옴

 

 * System.in 사용하여 입력 받기

- 한 바이트씩 읽어 들인다

- 따라서 한글과 같이 여러 바이트로 된 문자들을 읽기 위해선, InputStreamReader와 같은 보조스트림 +

 

- 예제

# SystemInTest 클래스

package Ch14.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.in은 inputStream으로 1바이트 단위로 읽어들임
			//표준IO는 close() 하지 않음, 계속 열려있는 것이기 때문에
			//read()의 반환값은 int --> why? stream의 끝에 도달하면 더 이상 읽을 것이 없어 -1을 반환
			//(1바이트를 읽지만, 4바이트로 처리)
			System.out.println(i);
			System.out.println((char)i);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
		
	}

}
 

--> System.in은 inputStream이기 때문에 1바이트씩 읽어 들인다.

--> 이 때 read() 메서드의 반환값은 int인데, stream의 끝에 도달하면 더이상 읽을 것이 없어 -1을 반환하는 것을 처리하기 위해서이다. (따라서 1바이트를 읽지만 4바이트로 처리하게 된다)

 

# SystemInTest2 클래스

package Ch14.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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
		
	}

}
 

--> System.in 스트림만 쓰면 1바이트씩만 읽어들이기 때문에, 한글로 끝이라고 쓰면 종료가 되지 않는데 한글은 2바이트이기 때문이다

--> 따라서 1바이트가 아니라 멀티바이트를 처리할 수 있게 도와주는 보조스트림인 InputStreamReader를 써주고, InputStreamReader 생성자의 인자로 inputStream(여기선 System.in)을 넣어주면 한글도 잘 읽을 수 있다

--> 읽을 땐 InputStgreamReader로 read()하면 됨 (isr.read())

 

* Scanner 클래스

- 생성자가 다양하기 때문에 콘솔에서뿐만 아니라 여러 소스로부터 자료를 읽을 수 있다

 

* Console 클래스

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

- 이클립스와는 연동되지 X

 

--> 이클립스와 연동되지 않으므로 이처럼 실행해보면 에러가 나게 됨

--> 실제 콘솔 화면에서 실행해야 함

 

storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202101/172902-53/[%ED%8C%A8%EC%8A%A4%ED%8A%B8%EC%BA%A0%ED%8D%BC%EC%8A%A4]-%EA%B5%90%EC%9C%A1%EA%B3%BC%EC%A0%95%EC%86%8C%EA%B0%9C%EC%84%9C-java-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%98%AC%EC%9D%B8%EC%9B%90-%ED%8C%A8%ED%82%A4%EC%A7%80-online..pdf