자바 io 프로그래밍 개념
자바에서 입출력을 수행하려면 키보드 - 마우스 등을 연결하려고 하 무엇인가가 필요한데 이 때 이것을 스트림(Stream) 이라고 한다.
스트림이란 ??
사전적 의미는 ‘시냇물’
데이터를 운반하는데 사용되는 연결통로 , 흐름
프로그램이 외부에서 데이터를 읽거나 외부로 데이터를 출력하는 작업이 빈번하게 일어나는데 이때 데이터는 어떠한 통로를 통해서 데이터가 이동된다.
이 때 이 통로를 Stream 이라고 한다.
다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것 (그 전까지는 List , Set , Map 등의 사용방법이 서로 달랐다.)
입출력 스트림에는 InputStream , OutputStream 이 존재하는데 단일 방향으로 연속적으로 흘러간다.
Java.io 패키지의 주요 클래스 설명
File | 파일 시스템의 파일 정보를 얻기 위한 클래스 |
Console | 콘솔로부터 문자를 입출력하기 위한 클래스 |
InputStream/OutputStream | byte(바이트) 단위 입출력을 위한 최상위 스트림 클래스 |
FileInputStream / FileOutputStream | |
DataInputStream / DataOutputStream | |
ObjectInputStream / ObjectOutputStream | byte(바이트) 단위 입출력을 위한 하위 스트림 클래스 |
PrintStream | |
BufferedInputStream / BufferedOutputStream | |
Reader / Writer | 문자 단위 입출력을 위한 최상위 입출력 스트림 클래스 |
FileReader / FileWriter | |
InputStreamReader / OutputStreamWriter | 문자 단위 입출력을 위한 하위 스트림 클래스 |
PrintWriter | |
BufferedReader / BufferedWriter |
바이트 단위 입출력 스트림은 모든 종류의 데이터들을 주고 받을 수 있다.
(바이트 스트림은 1Byte 단위로 입력 , 출력한다)
스트림의 특징
- 연속성 : 데이터를 한번에 처리 안하고 연속적으로 한 바이트씩 처리함.
- 입출력 통합 처리 :
- 유지보수성 향상
- FIFO (first in first out) :선입선출 방식이다.
- 단방향 : 하나의 스트림에서 입출력이 동시에 이루어지지 않는다. 입력과 출력에 각각 스트림을 열어 사용해야 한다.
스트림의 분류
전송 방향에 의한 분류
- 입력 스트림 : 디바이스로부터 데이터를 읽어오는 스트림
- 출력 스트림 : 데이터를 출력하는 스트림
전송 단위에 의한 분류
- 바이트 스트림 : 1 Byte 단위로 입력 , 출력하는 스트림
- 문자 스트림 : 한 문자(2 Byte) 단위로 입력 , 출력하는 스트림
OutputStream 의 메소드
- void close() : 스트림을 닫는다.
- void flush() : 스트림 버퍼의 내용을 비운다
- write(int i) : 주어진 값을 출력
- write(byte b[]) : 배열 b에 저장된 내용을 모두 출력
※ flush 와 close 메소드를 사용해야 하는 이유 :
- flush 를 사용해 버퍼에 남아있는 데이터를 강제로 출력 스트림에 전송한다. 그러지 않으면 버퍼에 남아있는 데이터가 손실이 될 수도 있다.
- close 메소드로 스트림을 닫아줌으로써 데이터의 완전성을 보장하고 시스템 자원을 효율적으로 관리할 수 있다.
보조 스트림
스트림의 기능을 향상시키거나 새로운 기능을 추가시키며 , 직접적인 데이터 입출력은 할 수 없다.
※버퍼란 ? : 데이터 전송의 효율성을 높이기 위해 사용되는 임시 저장공간 . 비유를 해서 물건을 옮길 때 하나씩 옮기면 시간도 오래 걸리고 작업 효율이 나쁘기 때문에 손수레 같은것에 담아서 한번에 옮기는데
이 때 버퍼가 손수레 같은 역할을 한다고 보면 된다.
메모리 내에서 데이터를 일시적으로 저장하여, I/O 작업이 진행될 때마다 직접적으로 파일이나 네트워크와 통신하지 않고 버퍼에 저장된 여러개의 데이터를 한 번에 처리함으로써 성능을 향상시킨다.
작업에 효율성을 크게 향상시키지만 버퍼가 가득 차지 않으면 데이터를 지연시키는 원인이 될 수도 있다.
//파일 입력
Writer fout = new FileWriter("C:\\\\TMP_IO\\\\test1.txt",false); //true 내용을 덮어쓰기가 아닌 추가하기로 바꿈 false 는 덮어쓰기
fout.write("HElloworld\\n"); //test 파일안에 내용 삽입
fout.write("TEST2\\n"); //여기 입력한 내용이 덮어쓰기가 됨
fout.write("TEST3\\n");
fout.flush();
fout.close();
// reader 클래스 주요 메서드 = read() 유니코드값 리턴
Reader fin = new FileReader("C:\\\\TMP_IO\\\\test1.txt");
StringBuffer buffer = new StringBuffer();
int data;
while((data = fin.read())!=-1) {
// int data = fin.read(); //파일안의 내용 읽음
// if(data==-1) //읽을거없으면 나감
// break;
// System.out.print((char)data);
buffer.append((char)data); //buffer 안에 저장
}
System.out.println(buffer);
fin.close();
'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글
24년 10월 2일 (0) | 2024.10.08 |
---|---|
24년 10월 1일 (6) | 2024.10.07 |
24년 09월 27일 (1) | 2024.10.03 |
24년 09월 26일 (1) | 2024.10.03 |
24년 09월 25일 (1) | 2024.10.03 |