쌍용 강북 교육센터 국비학원 Day 20일차
IO (InputStream, OutputStream)
한 곳에서 다른 곳으로의 데이터 흐름을 Stream (스트림)이라고 한다.
그리고 스트림은 단방향이기 때문에 입력과 출력이 동시에 발생할 수 없다. 그렇기 때문에 용도에 따라 입력스트림, 출력스트림이 나뉜다.
(물론 꼭 입력장치나 출력장치가 하드웨어일 필요는 없다. 다만, 이해를 돕기 위해 가장 보편적인 흐름을 보여준 것이다.)
쉽게 접해볼 수 있는 가장 대표적인 System에 대해서 알아보자
System.in : 부모클래스가 추상클래스 InputStream(기본 입력 스트림) 타입인 것으로서 접속점 (Node, 빨대)이 키보드인 1 byte 기반 입력 스트림이다.
- System.in 의 주요메소드
(System.in).read () - 1byte 씩 데이터를 읽어서 1byte 씩 반환하고 입력받은 값이 Ctrl+C(윈도우), Ctrl+D(유닉스,리눅스) 이라면 (강제종료를 뜻한다) -1 을 반환해주는 메소드이다. read() 메소드의 리턴타입은 byte 가 아니라 int 이다.
또한 checked exception 인 IOException 이 발생할수도 있으므로 반드시 예외처리를 꼭 해주어야 한다.
(return 타입이 char [ ] 배열 또한 가능해서 byte 배열을 통해서 묶어서 사용도 가능하다)
주의해야할 점은 입력받은 데이터는 int 형으로 저장되는데 이는 해당 문자의 시스템 또는 운영체제의 인코딩 형식의 (대다수의 UTF-8) 10진수로 변수에 저장된다.
System.out : 부모클래스가 추상클래스인 OutputStream(기본 출력 스트림) 타입인 것으로서 접속점(Node, 빨대) 이 콘솔화면(모니터)인 1 byte 기반 출력 스트림(PrintStream)이다.
- System.out 의 주요 메소드 :
println (String str) - 문자열과 변수 함께 출력할 수 있는 메소드 문자열과 변수를 함께 사용할 수 있으나 반드시 '+'로 연결 시켜줘야 한다. 내용 출력 후 자동으로 줄바꿈을 한다.
printf (String str) - printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.
-
n : 출력할 전체 자리수 지정(오른쪽 정렬). 예) %3d, 전체자리수가 3인 정수
-
0 : 전체 자리수가 지정된 경우 왼쪽의 남는 자리에 0을 출력. 예) %03d
-
- : 전체 자리수가 지정된 경우 왼쪽 정렬하고 빈칸에 공백 출력.
-
.m : 소수점 아래 자리수 지정. 잘리는 소수점 자리수는 반올림 시켜서 표시. 예)3.2f
write (int b) - byte를 출력하거나, 아스키 코드 등을 출력할때 쓰입니다. 이후 flush 메소드를 사용 해야한다.
flush () - 출력버퍼에 임시로 보관되어 스트림으로 출력될 때까지 대기중인 데이터를 스트림으로 내보내는 것을 flush 라고 한다. write() 메소드는 flush() 메소드와 함께 사용되어야만 출력버퍼에 들어가 있던 내용이 모니터(또는 파일) 에 출력된다.
그런데 flush() 메소드를 사용하지 않아도 모니터(또는 파일) 에 출력되는 경우이라면 auto flush 가 적용되어졌기 때문이다.
FileInputStream
InputStream 를 상속받았으며, 파일로 부터 바이트로 입력받아, 바이트 단위로 출력할 수 있는 클래스이다. Node 스트림 (접속점)이 파일이며 1 byte 기반 입력 스트림이다. (Scanner 처럼 close로 반드시 닫아줘야 한다)
1. 데이터 소스 - 파일로부터 읽어들임 (노드스트림 : FileInputStream)
2. 데이터 목적지 - 결과물을 모니터에 출력 (노드스트림 : System.out)
텍스트를 저장한 메모장이 있다고 할 때 그것을 FileInputStream을 이용해 읽어오는 예제이다
read ( ) - 메소드는 해당 파일에서 데이터를 1byte 씩 읽어서 int 타입으로 리턴해준다. 만약에 파일의 내용물에서 읽어들일 데이터가 없다라면 -1을 리턴시켜준다.
Stream에 대한 설명이 부족한거 같아 도움이되는 글이있어서 퍼왔다.
JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader]
이 글을 지금 이 시점에 써야 할까 고민을 많이 했다. 사실 자바를 그냥 다룰 줄만 아는 것에 목표를 둔다면 이 글이 무의미할 수도 있다. 그러나 자바에 대해 조금이라도 관심이 있고 더 배우고
st-lab.tistory.com
오늘은 여기까지.