java.io
。Java에서I/O를 수행하기위한Class를 포함하는패키지
▶파일등과 같은 외부로부터의 데이터 송수신을 담당
InputStream:java.io.InputStream
。Java가 외부로부터 입력된 데이터를 받을 수 있도록 입력통로를 구현하는Class
。외부에서 입력된데이터를Byte단위의InputStream으로 받아온다.
InputStream종류
System.in
。키보드와 연결된standard input stream
▶키보드 입력을Byte단위로 읽어서InputStream 객체생성
InputStream is = System.in;
new File("파일명")
。외부파일을Java로 읽어오기위한standard input streamScanner scanner = new Scanner(new File("data.txt")); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } scanner.close();
InputStreamReader:java.io.InputStreamReader
。InputStream객체를InputStreamReader객체로 변환하는브리지 클래스
▶Byte 단위의InputStream객체를String 단위로 읽을 수 있도록 변환
InputStreamReader생성InputStreamReader isr = new InputStreamReader(System.in);。
키보드로 입력되어 생성된Byte단위의InputStream객체를생성자로 전달하여InputStramReader 객체로 생성
BufferedReader:java.io.BufferedReader
。Buffer를 활용하여 입력되는 값의Read를 수행하는 함수
。입력받는 데이터는String으로 고정됨
。키보드에서 입력이 발생한 즉시 한 문자씩Buffer로 전송
▶Buffer가 가득차거나개행문자( ex .\n)을 접하면 그전까지Buffer의 내용을 한번에 전달.
▶Buffer를 사용하지 않는 경우키보드의 키를 누르는 즉시 전달됨.
。Buffer를 사용하므로 사용 후 반드시br객체.close()를 수행
java.util.Scanner와 차이
。Scanner의 경우띄어쓰기와개행문자를 경계로 하여 입력값을 인식
▶BufferedReader는 오직개행문자를 경계로 인식
。Scanner의 경우스캐너객체.nextInt()등을 통해 다양한 type의 입력값을 받을 수 있다.
▶BufferedReader는BufferedReader객체.readlLine()을 통해 오직String만 입력받을 수 있다.
▶int를 받을 경우Interger.parseInt()로 형변환 수행
。입력값이 많으면BufferReader가 유리하며 처리속도가 더 빠르다.
▶Scanner의Buffer Size = 1024 char
▶BufferedReader의Buffer Size = 8192 char
BufferedReader객체생성
。보통InputStreamReader객체를생성자로 전달하여 생성BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader객체.readLine()
。키보드에서 입력하여Buffer에 저장된 내용을String으로 수신
▶ 입력 시java.io.IOException;의throws IOException를method에 선언public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in) ); String s = br.readLine(); int i = Integer.parseInt(br.readLine()); // 정수형 변환 }
BufferedReader데이터 가공
。BufferedReader로 입력된 데이터는개행문자단위로 분할되므로,Scanner처럼공백 단위로 가공 시StringTokenizer또는String.split()사용
BufferedWriter:java.io.BufferedWriter
。Buffer를 활용하여 출력을 수행하는 Class
▶System.out.println();와 달리 많은 양의 출력이 필요한 경우 사용
。System.out.println();와 달리출력과개행을 동시에 수행하지 않으므로,bw.write("문자열" + "\n")또는bw객체.newLine()을 통해개행을 수행해야한다.
。Buffer를 사용하므로 사용 후 반드시bw.flush()수행 후bw객체.close()수행
BufferedWriter객체생성
。보통OutputStreamWriter객체를생성자로 전달하여 생성BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedWritermethod
bw객체.close()
。BufferedWriter이 사용하는Stream을 종료
▶close()를 선언하기 전에flush()가 선행되어야한다.
bw객체.flush()
。BufferedWriter이 사용하는Buffer내 저장된 모든 문자열을 출력 및 비우는 역할을 수행
。Buffer가 가득찬 경우 자동으로 수행됨.
bw객체.newLine()
。개행역할을 수행(\n)
bw객체.write(문자열)
。Buffer에 출력할 데이터를 작성
Serializable 인터페이스:java.io.Serializable
。객체를직렬화(Selialization)하는 용도의인터페이스
▶ 해당인터페이스를 상속하여 네트워크를 통해 객체를 전송하거나 (Web API) ,객체를파일이나DB에 저장 시 활용
。해당인터페이스에는객체를이진데이터(ByteStream)으로직렬화하거나역직렬화하는 기능을 정의
▶Byte Stream:데이터를Byte단위로 input , output 할 수 있는Stream 객체
직렬화(Serialization) :
。객체를Byte Stream으로 변환하여파일에 저장하거나네트워크를 통해 전송할 수 있도록 하는 과정
역직렬화(Deserialization) :
。Byte Stream을객체로 변환하는 과정.