반응형
- 입력스트림
데이터가 들어올 때 (입력)
- 출력스트림
데이터가 나갈 때 (출력)
스트림은 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
반응형
'[Java] > [Java]' 카테고리의 다른 글
[Java] 자바 멀티스레드 [Multi-Thread] Runnable vs Thread (0) | 2022.09.22 |
---|---|
[Java] 자바 Generic (제네릭) (0) | 2022.09.13 |
[Java] 자바 메모리 구조, String vs StringBuilder vs StringBuffer, 메모리 주소(힙 메모리 누수 팁), GC(가비지 컬렉터) (0) | 2022.08.21 |
[Java] 자바 List vs ArrayList (0) | 2022.08.02 |
[Java] 자바 runnable jar (jar 실행파일 만들기) (0) | 2022.05.22 |