본문 바로가기

코린이

Chapter14 입출력 스트림 본문

자바/혼공 학습단 10기

Chapter14 입출력 스트림

winsome99 2023. 8. 20. 23:48
반응형

#기본 미션 입출력 스트림 요약 정리하여 포스팅하기

14-1 입출력 스트림

스트림은 단일 방향으로 연속적으로 흘러가는 것을 말한다.

프로그램이 출발지 또는 도착지에 따라 사용하는 스트림의 종류가 결정된다.

프로그램이 도착지이면 흘러온 데이터를 입력받아 입력 스트림을 사용

프로그램이 출발지이면 데이터를 출력해야 하므로 출력 스트림을 사용한다.

입출력 스트림의 종류

java.io 패키지에는 여러 가지 종류의 스트림 클래스를 제공하고 있다.

  • 바이트 기반 스트림
  • 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용
  • 문자 기반 스트림
  • 문자 데이터를 읽고 출력할 때 사용

바이트 출력 스트림

바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스이다.

모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스를 상속받아서 만들어진다.

OutputStream 클래스의 주요 메소드

  • write(int b): 1byte를 출력한다.
  • write(byte[] b): 매개값으로 주어진 배열 b의 모든 바이트를 출력한다.
  • write(byte[] b, int off, int len): 매개값으로 주어진 배열 b[off]부터 len개까지의 바이트를 출력

바이트 입력 스트림

InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스이다.

모든 바이트 기반 입력 스트림은 InputSteam 클래스를 상속받아서 만들어진다.

InputSteam 클래스의 주요 메소드

  • read(): 1byte를 읽고 읽은 바이트를 리턴한다
  • read(byte[] b): 읽은 바이트를 매개값으로 주어진 배열에 저장하고 읽은 바이트 수를 리턴
  • read(byte[] b, int off, int len): len개의 바이트를 읽고 매개값으로 주어진 배열에서 b[off]부터 len개까지 저장, 읽은 바이트 수를 리턴

문자 출력 스트림

Writer 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스이다. 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속받아서 만들어진다.

Writer 클래스의 주요 메소드

  • writer(int c): 매개값으로 주어진 한 문자를 보낸다
  • writer(char[] cbuf): 매개값으로 주어진 배열의 모든 문자를 보낸다.
  • writer(char[] cbuf, int off, int len): 매개값으로 주어진 배열에서 cbuf[off]부터 len개까지의 문자를 보낸다.
  • writer(String str): 매개값으로 주어진 문자열을 보낸다.
  • writer(String str, int off, int len): 매개값으로 주어진 문자열에서 off 순번부터 len개까지의 문자를 보낸다

14-2 보조 스트림

보조 스트림

다른 스트림과 연결이 되어 여러 가지 편리한 기능을 제공해주는 스트림을 말한다.

보조 스트림은 자체적으로 입출력을 수행할 수 없기 때문에 입출력 소스와 바로 연결되는 InputStream,OutputStream, Reader, Writer등에 연결해서 입출력을 수행한다.

보조 스트림 연결하기

보조 스트림 변수 = new 보조스트림(연결스트림)

예를 들어 InputStream을 문자 변환 보조 스트림인 InputStreamReader에 연결하는 코드는

문자 변환 보조 스트림인InputStreamReader를 다시 성능 향상 보조 스트림인 BufferedReader에 연결할 수 있다.

InputStream is = System.in;
InputStreamReader reader = new InputStreamReader(is);
BufferedReader br = new BuffereReader(reader);

문자 변환 보조 스트림

소스 스트림이 바이트 기반 스트림이면서 입출력 데이터가 문자라면 Reader와 Writer로 변환해서 사용하는 것을 고려할 수 있다.

  • OutputStreamWriter
  • Writer writer = new OutputStreamWriter(바이트 기반 출력 스트림);
  • InputStreamReader
  • Reader reader = new InputSTreamReader(바이트 기반 입력 스트림);

성능 향상 보조 스트림

프로그램의 성능은 입출력이 가장 늦은 장치를 따라간

CPU와 메모리가 아무리 뛰어나도 하드디스크의 입출력이 늦어지면 프로그램의 실행 성능은 하드 디스크의 처리 속도에 맞춰진다. 네트워크도 느린 네트워크 환경이면 컴퓨터 성능이 좋아도 메신저나 게임의 속도가 느려져서 완전한 해결책이 없고 프로그램 입출력 소스와 직접 작업하는 대신 중간에 메모리 버퍼와 작업함으로써 실행 성능 향상 가능.

BufferedInputStream 과 BufferedReader

: BufferedInputStream 은 바이트 입력 스트림에 연결되어 버퍼를 제공해주는 보조 스트림이다.

BufferedReader 은 문자 입력 스트림에 연결되어 버퍼를 제공해주는 스트림이다.

기본 타입 입출력 보조 스트림

DataInputStream과 DataOutputStream 보조 스트림을 연결하면 기본 타입을 입출력할 수 있다.

DataInputStream dis = new DataInputStream(바이트 기반 입력 스트림);
DataOutputStream dos = new DataOutputStream(바이트 기반 출력 스트림);

객체 입출력 보조 스트림

자바는 메모리에 생성된 객체를 파일이나 네트워크에 출력 가능하다. 객체는 문자가 아니므로 바이트 기반 스트림으로 출력해야한다.

객체 직렬화 : 객체 출력을 위해 객체의 데이터를 일렬로 늘어선 연속적인 바이트로 변경하는 것

ObjectInputStream ois = new ObjectInputStream(바이트 기반 입력 스트림);
ObjectInputStream oㅐs = new ObjectInputStream(바이트 기반 출력 스트림);

 

#선택 미션 p.632 문제 2번 풀고, 풀이 과정 설명하기

import java.io.BufferedReader;
import java.io.FileReader;

public class AddLineNumberExample {
	public static void main(String[] args) throws Exception {
		String filePath = "G:/혼공자/week14/AddLineNumberExample.java";
		
		FileReader fr = new FileReader(filePath);
		BufferedReader br = new BufferedReader(fr);
		
		int rowNumber = 0;
		String rowData;
		while( (rowData=br.readLine())!= null ) {
			System.out.println(++rowNumber + ": " + rowData);
		}
		
		br.close();
	}
}

G:/혼공자/week14/AddLineNumberExample.java 파일 경로를 지정해준다.

그 다음 지정된 경로의 파일을 읽어오기 위한 FileReader 객체를 생성한다.

BufferedReader br는 FileReader와 함께 사용해 버퍼링된 입력 스트림을 생성

String rowData는 파일에서 읽어온 한 줄의 데이터를 저장할 변수이다.

while문에서 파일의 끝까지 한 줄씩 읽어오는 반복을 하여 br.readLine()이 파일끝까지 갈때 반복을 종류한다.

그런다음 System.out.println(++rowNumber + ": " + rowData);는 현재 줄 번호를 증가 시키고 줄 번호와 해당 줄의 데이터를 함께 출력한다.

br.close();로 당아 입력 스트림을 해제

출력화면

반응형

'자바 > 혼공 학습단 10기' 카테고리의 다른 글

chapter13 컬렉션 프레임워크  (0) 2023.08.12
혼공자 4주차 미션  (0) 2023.07.30
chapter12 스레드  (0) 2023.07.29
혼공단 3주차 미션  (0) 2023.07.23
혼공자 Chapter11 API  (0) 2023.07.21
Comments