Developer Note/국비과정 수업내용 정리&저장

24년 09월 30일

DH_PARK 2024. 10. 3. 23:33

자바 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