자바 개념 4 (입출력)
자바 입출력
- 자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)이라는 흐름을 통해 다룸.
스트림 ? 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름.
순서있는 데이터의 연속적인 흐름
자료의 입출력을 도와주는 중간매개체
한 방향으로만 통신할 수 있어서, 입력과 출력을 동시에 처리할 수 없음.
두 작업을 동시에 하고 싶다면, 스트림 객체 2개를 생성해야한다.
입출력 스트림은 객체 형태로 사용하며 읽기,쓰기,바이트 개수 계산 등 미리 정의된 유용한 메서드를 제공.
스트림의 종류?
문자단위로 처리하느냐, 바이트 단위로 처리하느냐에 따라 나뉨
바이트 스트림 - 입력의 경우 InputStream 이 붙으며 출력의 경우 OutputStream 이 붙는다
이미지나 동영상 등을 송수신 할때 주로 사용
문자 스트림 -입력의 경우 Reader 이 붙으며 출력의 경우 Writer 이 붙는다
HTML 문서, 텍스트 파일을 송수실할 때 주로 사용
자바의 표준 입출력
- 자바에서는 표준 입출력(콘솔 입출력)을 위해 System 이라는 표준 입출력 클래스를 사용.
(c언어의 scanf(),prinf()처럼)
(java,lang 패키지에 포함되있음)
- System 클래스에는 표준 입출력을 위해 다음과 같은 클래스 변수(static variable)가 정의되어 있다.
① System.in : 표준 입력
② System.out : 표준 출력
③ System.err : 표준 출력
- 사용법?
표준 입출력 스트림은 자바가 자동으로 생성하므로, 개발자가 별도로 스트림을 생성하지 않아도 사용가능하다.
예를 들어, System이라는 클래스의 static 필드 in에 이미 InputStream 객체가 하나 존재
1 2 3 4 5 6 7 8 9 | //System.in.read()는 아스키 코드값이 입력 int num = System.in.read() - 48; //or - '0'; System.out.print(7); // print() 메소드는 줄 바꿈을 하지 않음. System.out.println(3); // 정수 출력 System.out.println(3.14); // 실수 출력 System.out.println("자바!"); // 문자열 출력 System.out.println("문자열끼리의 " + "연결도 가능합니다."); System.out.println("숫자" + 3 + "과 문자열의 연결도 가능합니다."); | cs |
**System.in을 직접 사용하면 바이트를 문자나 숫자로 변환해야 하는 어려움 존재.**
콘솔 입력 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | InputStream in = System.in; int a; byte[] b = new byte[3]; a = in.read() - '0'; //System.in에 들어있던 그 객체의 read()메소드를 사용 /* a = System.in.read()랑 같은 말 */ in.read(b); InputStream in = System.in; InputStreamReader reader = new InputStreamReader(in); char[] a = new char[3]; reader.read(a); BufferedReader br = new BufferedReader(reader); // new BufferedReader(new InputSteamReader(System.in)); String a = br.readLine(); //InputStream - byte //InputStreamReader - character //BufferedReader - String | cs |
입력 받기 데 편한 클래스로는 Scanner 클래스가 있다.
단어 뿐만 아니라 숫자, 문자열등 다양하게 읽어 들일 수 있는 여러 메소드들이 준비되어있음.
Scanner 클래스를 이용해 콘솔 입력 받는 예시
1 2 3 4 5 6 7 8 9 | import java.util.Scanner; //기본적으로 import 문 필요 Scanner sc = new Scanner(System.in); String name = scan.next(); // "HAN" String city = scan.next(); // "INCHEON" int age = scan.nextInt(); // 25 double weight = scan.nextDouble(); // 65.1 boolean single = scan.nextBoolean(); // true | cs |
next - 단어, nextLine - 라인, nextInt - 정수 등 다양