본문 바로가기
  • Coding & Book
학습단/JAVA 학습단

22. 혼공자 22일차(입출력 스트림_2)

by 루이3 2023. 8. 15.

입출력 스트림의 종류

  • 문자 기반 스트림은 문자 데이터를 읽고 출력할때 사용합니다.
구분 바이트 기반 스트림 문자 기반 스트림
입력 스트림 출력 스트림 입력 스트림 출력 스트림
최상위 클래스 InputStream OutputStream Reader Writer
하위 클래스 XXXInputStream XXXOutputStream XXXReader XXXWriter

 

 

문차 출력 스트림: Writer

  • Writer는 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스 입니다.
  • 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속받아서 만들어집니다.
  • 아래는 주요 메소드들입니다.
리턴 타입 메소드 설명
void write(int c) 매개값으로 주어진 한 문자를 보냅니다.
void write(char[] cbuf) 매개값으로 주어진 배열의 모든 문자를 보냅니다.
void write(char[] cbuf, int off, int len) 매개값으로 주어진 배열 c[off]부터 len개까지의 문자를 보냅니다
void write(String str) 매개값으로 주어진 문자열을 보냅니다.
void write(String str, int off, int len) 매개값으로 주어진 문자열에서 off순번부터 len개 까자의 문자를 보냅니다.
void flush() 버퍼에 잔류하는 모든 문자를 출력합니다.
void close() 출력 스트림을 닫습니다.

 

write(int c) 메소드

  • write(int c) 메소드는 매개 변수로 주어지는 int(4byte)에서 끝 2byte(1개의 문자)만
    출력 스트림으로 보냅니다.
  • 매개변수가 int 타입이라고 4byte 모두를 보내는 것은 아닙니다.
package sec19.exam01;

import java.io.FileWriter;
import java.io.Writer;


public class WriteExample {

	public static void main(String[] args) throws Exception {
		Writer writer = new FileWriter("저장 위치/test.txt");
		
		char a = 'A';
		char b = 'B';
		char c = 'C';
		
		writer.write(a);
		writer.write(b);
		writer.write(c);
		
		writer.flush();
		writer.close();
	}
}

 

 

 

write(char[] cbuf) 메소드

  • 매개값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냅니다.
package sec19.exam01;

import java.io.FileWriter;
import java.io.Writer;

public class WriteExample_2 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Writer writer = new FileWriter("저장 위치/test2.txt");
		
		char[] array = { 'A', 'B', 'C' };
		
		//배열의 모든 문자를 출력합니다.
		writer.write(array);
		
		writer.flush();
		writer.close();
	}
}

 

 

write(char[] cbuf, int off, int len) 메소드

  • c[off]부터 len개까지의 문자를 출력스트림으로 보냅니다.
  • 아래는 배열 일부를 출력하는 코드 입니다.
package sec19.exam01;

import java.io.FileWriter;
import java.io.Writer;

public class WriteExample_3 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Writer writer = new FileWriter("저장위치/test3.txt");
		
		char[] array = { 'H', 'E', 'L', 'L', 'O' };
		
        //배열 1번 인덱스부터 3개를 출력합니다.
		writer.write(array, 1, 3);
		
		writer.flush();
		writer.close();
	}
}

문차 입력 스트림: Reader

  • Reader는 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스 입니다.
  • 모든 문자 기반 입력 스트림은 Reader 클래스를 상속받아서 만들어집니다.
  • 아래는 주요 메소드들입니다.
리턴 타입 메소드 설명
int read() 1개의 문자를 읽고 리턴합니다.
int read(char[] cbuf) 읽은 문자들을 매개값으로 주어진 문자 배열에 저장하고 읽은 문자 수를 리턴합니다.
int read(char[] cbuf,int off, int len) len개의 문자를 읽고 매개값으로 주어진 문자 배열에서 cbuf[off]부터 len개까지 저장합니다
void close() 입력 스트림을 닫습니다.

 

read() 메소드

  • read() 메소드는 반대로 입력 스트림으로부터 1개(2byte)의 문자를 읽고 int(4byte) 타입으로 리턴합니다.
  • 리턴된 4byte 중 끝에 있는 2byte에 문자 데이터가 들어 있습니다.
  • 아래코드는 저장된 ELL을 한문자씩 읽는 코드 입니다.
package sec19.exam01;

import java.io.FileReader;
import java.io.Reader;

public class ReadExample {

	public static void main(String[] args) throws Exception {
		Reader reader = new FileReader("저장위치/test3.txt");
		while(true) {
			int data = reader.read();
			if(data == -1) break;
			System.out.println((char)data);
		}
		reader.close();
	}
}

 

 

read(char[] cbuf, int off, int len) 메소드

  • read(char[] cbuf, int off, int len) 메소드는 입력스트림으로 부터 len개의 문자 만큼 읽고
    매개값으로 주어진 문자배열에서 cbuf[off] 부터 len개까지 저장합니다.
  • 읽은 문자수인 len개를 리턴합니다.(실제로 읽은 문자수가 len개보다 적은 경우 읽은수만큼 리턴합니다.)
package sec19.exam01;

import java.io.FileReader;
import java.io.Reader;

public class ReadExample_3 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Reader reader = new FileReader("저장 위치/test3.txt");
		
		char[] buffer = new char[5];
		
		//입력 스트림으로 부터 3개의 문자를 읽고 buffer[2], buffer[3],buffer[4]에 각각 저장
		int readCharNum = reader.read(buffer, 2, 3);
		if(readCharNum != -1) {
			for(int i=0; i<buffer.length; i++) {
				System.out.println(buffer[i]);
			}
		}
		
		reader.close();
	}
}