반응형

 

- 입력스트림

데이터가 들어올 때 (입력)

- 출력스트림

데이터가 나갈 때 (출력)

 

스트림은 2가지로 나뉘게 된다.

1. 바이트 기반 스트립 : 그림 멀티미디어 문자 등 모든 종류의 데이터를 받고 보낼 수 있다.

2. 문자 기반 스트림 : 문자만 받고 보낼 수 있게 특화되어 있다.

 

- 바이트 기반 스트림

InputStream (최상위 입력 스트림 클래스)

XXX InputStream (하위 클래스 스트림) ex) FileInputStream

OutputStream (최상위 출력 스트림 클래스)

XXX OuputStream (하위 클래스 스트림) ex) FileOutputStream

 

- 문자 기반 스트림

Reader (최상위 입력 스트림 클래스)

XXXReader (하위 입력 스트림) ex) FileReader

Writer (최상위 출력 스트림)

XXXWriter (하위 출력 스트림) ex) FileWriter

 

파일에 글을 읽고 싶을 때 (파일이 입력될 때) → 입력 스트림

파일을 저장하고 싶을 때 (파일이 저장되어서 출력 될 때) → 출력 스트림

 

- InputStream

리턴 메소드 설명
int  read()  1바이트씩 읽고 읽은 바이트(UTF-8)를 리턴한다.
int read(byte[] b) 읽은 바이트들을 b(바이트 배열[UTF-8 값들)에 저장하고 실제 읽은 바이트 수를 리턴한다.
int read(byte[] b, int off, int len) off의 인덱스 번호부터 len의 크기만큼 읽어 b(바이트배열에 저장후에 출력한다.
void  close()  사용 후에 스트림을 가비지 컬렉터가 수집할 수 있게 닫아야 한다.

 

 

 

 

- OutputStream

리턴 메소드 설명
void write(int b) 1 바이트를 저장 또는 화면 따위에 보낸다
void write(byte[] b) 바이트 배열 전체를 저장 또는 화면 따위에 보낸다.
void write(byte[] b, int off, int len)  off의 인덱스 번호부터 len의 크기만큼 b(바이트배열)을 보낸다
void flush() 버퍼에 잔류하는 모든 바이트를 출력한다. (이 행위를 하지 않으면 바이트는 할당량[메모리버퍼]만큼 찰 때까지 출력하지 않는다.)
void close() 사용 후에 스트림을 가비지 컬렉터가 수집할 수 있게 닫아야 한다.

 

 

- Reader

리턴 메소드 설명
int reade() 한 개의 문자를 읽고 리턴한다.
int read(char[] cbuf) 읽은 문자들을 배열에 저장하고 읽은 문자 수를 리턴한다.
int read(char[] cbuf, int off, int len) off의 인덱스 번호부터 len의 크기만큼 문자를 리턴한다
void close() 사용 후에 스트림을 가비지 컬렉터가 수집할 수 있게 닫아야한다.

 

 

 

- Writer

리턴 메소드 설명
void write(int c) 한 문자를 파일이나 화면 따위에 보낸다
void write(char[] cubf) 읽은 문자의 배열을 파일이나 화면 따위에 보낸다
void write(char[] cbuf, int off, int len) off의 인덱스 번호부터 len의 크기만큼 문자의 배열을 파일이나 화면 따위에 보낸다.
void write(String str) 문자열을 파일이나 화면 따위에 보낸다
void write(String str, int off, int len) off의 인덱스 번호부터 len의 크기만큼 문자열을 파일이나 화면 따위에 보낸다.
void flush() 버퍼에 잔류하는 모든 바이트를 출력한다. (이 행위를 하지 않으면 바이트는 할당량[메모리버퍼]만큼 찰 때까지 출력하지 않는다.)
void close() 사용 후에 스트림을 가비지 컬렉터가 수집할 수 있게 닫아야한다.

 

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

public class Stream {

	public static void main(String[] args) throws IOException {

		/** -- inputStream -- **/
		// 1. is.read() 1 byte 씩 읽기
//		InputStream is = new FileInputStream("C:/test.txt"); // 'abcd' 내용이 저장 됨
//		int readByte;
//		while((readByte=is.read()) != -1) {
//			System.out.println(readByte); // 97 98 99 100
//		}
//		is.close();

		// 2. is.read(byte[] b) 내가 설정한 byte의 크기 읽기
//		InputStream is = new FileInputStream("C:/test.txt"); // '안녕하세요' 내용이 저장 됨
//		int readByte;
//		byte[] readBytes = new byte[3];
//		while( (readByte = is.read(readBytes)) != -1) {
//			System.out.println(new String(readBytes,0 , readByte)); // 안 녕 하 세 요 (한글은 UTF-8에서 주로 3byte이기 때문에 잘 읽어온다.)
//		}
//		is.close();

		
		/** -- outputStream -- **/
		// 1. os.write() 1 바이트씩 출력
//		OutputStream os = new FileOutputStream("C:test2.txt");
//		byte[] data = "안녕하세요".getBytes(); // '안녕하세요'의 바이트를 가져온다. (UTF-8 코드)
//		for (int i = 0; i < data.length; i ++) {
//			os.write(data[i]); // '안녕하세요'가 test2.txt에 저장된다.
//		}
//		os.flush();
//		os.close();
		
		
		// 2. os.write(byte[] b) → os 1번에서 for문 여러번 사용하는 것보다 효율적
//		OutputStream os = new FileOutputStream("C:test2.txt");
//		byte[] data = "안녕하세요".getBytes(); // '안녕하세요'의 바이트를 가져온다. (UTF-8 코드)
//		
//		os.write(data); // '안녕하세요'가 test2.txt에 저장된다.
//		os.flush();
//		os.close();
		
		
		/** -- reader -- **/
		// 1. reader.read() 한 개의 문자씩 읽기
//		Reader reader = new FileReader("C:/test.txt"); // '안녕하세요' 내용이 저장 됨
//		int readData;
//		while ( (readData = reader.read()) != -1 ) {
//			System.out.println((char) readData); // 안 녕 하 세 요 출력
//		}
//		reader.close();
		
		// 2. reader.read(char[] cbuf) 여러개의 문자열로 읽기
//		Reader reader = new FileReader("C:/test.txt"); // '안녕하세요' 내용이 저장 됨
//		int readData;
//		char[] cbuf = new char[2];
//		while ( (readData = reader.read(cbuf)) != -1 ) {
//			System.out.println(new String(cbuf, 0, readData)); // 안녕 하세 요 출력
//		}
//		reader.close();

		
		/** -- writer -- **/
		// 1. writer.write() 한 개의 문자씩 출력
//		Writer writer = new FileWriter("C:/test3.txt");
//		char[] data = "홍길동".toCharArray();
//		for(int i = 0; i < data.length; i++) {
//			writer.write(data[i]);
//		}
//		writer.flush();
//		writer.close();
		
		
		// 2. writer.write(char[] cbuf) 여러개의 문자열 출력
//		Writer writer = new FileWriter("C:/test3.txt");
//		char[] data = "홍길동".toCharArray();
//		writer.write(data);
//		writer.flush();
//		writer.close();
		
		// 3. writer(String)
		Writer writer = new FileWriter("C:/test3.txt");
		String data = "스프레이";
		writer.write(data);
		writer.flush();
		writer.close();

		
	}

}

 

 

출처 : https://www.youtube.com/watch?v=ISO3iy4aOh8&t=503s

반응형