🍀자바에서 데이터는 스트림Stream을 통해 입출력 된다.
🍀 스트림은 단일 방향
으로 연속적
으로 흘러가는 것을 이야기 한다.
🍀프로그램이 도착지냐 출발지냐에 따라 사용하는 스트림의 종류가 결정된다.
🍀java.io 패키지에는 여러 가지 종류의 스트림(Stream) 클래스 를 제공한다.
🍀 OutPutStream은 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스
이다.
🍀모든 바이트 기반 출력 스트림 클래스는 OutPutStream
클래스를 상속받아서 만들어 진다.
🍀리턴 타입 | 🍀메소드 | 🍀설명 |
---|---|---|
void | write(int b) | 1byte를 출력합니다. |
void | write(byte[ ] b) | 매개값으로 주어진 배열 b의 모든 바이트를 출력합니다. |
void | write(byte[] b, int off, int len) | 매가값으로 주어진 배열 b[off]부터 len개까지의 바이트를 출력합니다. |
void | flush() | 출력 버퍼에 잔류하는 모든 바이트를 출력합니다. |
void | close() | 출력 스트림을 닫습니다. |
🍀 write(int b)메소드는 매개 변수로 주어지는 int(4byte)
에서 끝 1byte
만 출력 스트림으로 보내진다.
🍀But 모두 4byte
로 모두 보내지는 것은 아니다.
📍1byte씩 출력하기
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WriteExample {
public static void main(String args[]) throw Exception {
OutputStream os = new FileOutput("C:/Temp/test1.db");
//데이터 도착지를 test1.db로 하는 바이트 기반 파일 출력 스트림을 생성
byte a = 10;
byte b = 20;
byte c = 30;
os.write(a); // 1byte씩 출력
os.write(b);
os.write(c);
os.flush(); // 출력 버퍼에 잔류하는 모든 바이트를 출력
os.close(); // 출력 스트림을 닫음
}
}
📍출력결과는 파일 탐색기에서 확인가능
🍀write(byte[] b) 메소드는 매개값으로 주어진 배열의 모든 바이트를 추력 스트림으로 보내진다.
📍배열 전체를 출력하기
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WriteExample {
public static void main(String args[]) throw Exception {
OutputStream os = new FileOutput("C:/Temp/test2.db");
byte[] array = {10,20,30};
os.write(array);
os.flush();
os.close();
}
}
📍출력결과는 파일 탐색기에서 확인가능
🍀write(byte[]b, int off, int len) 메소드는 b[off]부터 len개의 바이트를 출력 스트림으로 보낸다.
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WriteExample {
public static void main(String args[]) throw Exception {
OutputStream os = new FileOutput("C:/Temp/test3.db");
byte[] array = {10,20,30,40,50};
os.write(array, 1, 3); //배열의 1번 인덱스 부터 3개를 출력
os.flush(); //출력 버퍼에 잔류하는 모든 바이트를 출력
os.close(); //출ㄺ 스트림을 닫음
}
}
📍출력결과는 파일 탐색기에서 확인가능
🍀InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스
이다.
🍀모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속
받아서 만들어진다
🍀리턴 타입 | 🍀메소드 | 🍀설명 |
---|---|---|
int | read() | 1byte를 읽고 읽은 바이트를 리턴한다. |
int | read(byte[] b) | 읽은 바이트를 매개값으로 주어진 배열에 저장 , 읽은 바이트 수를 리턴. |
int | read(byte[] b, int off, int len) | len개의 바이트를 읽고 매개값으로 주어진 배열에서 b[off] 부터 len개까지 저장. 그리고 읽은 바이트 수 리턴. |
void | close() | 입력 스트림을 닫는다. |
🍀read() 메소드는 입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴
📍입력 스트림에서 5개의 바이트가 들어온다면 read()메소드로 1byte씩 5번
읽을 수 있다.
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExample {
public static void main(String args[]) throws Exception {
InputStream is = new FileInputStream("C:/Temp/test1.db);
while(true) {
int data = is.read(); //1byte씩 읽기
if(data == -1) break; //파일 끝에 도달했을 경우
System.out.println(data);
}
is.close(); //입력 스트림 닫음
}
}
📍실행 결과
10
20
30
🍀read(byte[] b) 메소드는 입력 스트림으로부터 매개값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장
, 그리고 읽은 바이트 수를 리턴
🍀실제로 읽은 바이트 숙 배열의 길이보다 적을 경우, 읽은 수만큼만 리턴
import java.io.FileInputStream;
import java.io.Inputstream;
public class ReadExample {
public static void main(String args[]) {
InputStream in = new FileInptuStream("C:/Temp/test2.db);
byte[] buffer = new byte[100]; //길이가 100인 배열 생성
while(true) {
int readByteNum = is.read(buffer); //배열 길이 만큼 읽기
if(readByteNum == -1) break; //파일 끝에 도달했을 경우
for(int i = 0; i<readByteNum; i++) {
//읽은 바이트 수만큼 반복하면서 배열에 저장된 바이트를 출력
System.out.println(buffer[i]);
}
}
is.close();
}
}
📍실행 결과
10
20
30
📍많은 양의 바이트를 읽을 때는 read()(byte b) 메소드를 사용하는 것이 좋다.
🍀 read(byte[] b) 메소드는 한 번 읽을 때 배열 길이만큼 읽기 때문에 읽는 횟수가 현저히 줄어든다.
🍀 read(byte b, int off, int len) 메소드는 입력 스트림으로부터 len개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]
부터 len개
까지 저장한다.
그리고 읽은 바이트 수인 len개를 리턴 한다.
🍀 read(byte b, int off, int len) 역시 입력 스트림으로부터 바이트를 더 이상 읽을 수 없다면 -1
을 리턴한다.
🍀 read(byte b, int off, int len) 메소드는 한 번에 읽어들이는 바이트 수를 len 매개값으로 조절할 수 있고, 배열에서 저장이 시작되는 인덱스를 지정할 수 ⭕있다.
🍀 Writer는 문자 기반 출력 스트림의 최상위 클래스
로 추상 클래스
이다.
📍스트림이 기본적으로 가져야 할 메소드 정의
🍀리턴 타입 | 🍀메소드 | 🍀설명 |
---|---|---|
void | write(int c) | 매개값으로 주어진 한 문자를 보낸다. |
void | write(char[] cbuf) | 매가값으로 주어진 배열의 모든 문자를 보낸다. |
void | write(char[] cbuf, int off, int len) | 매개값으로 주어진 배열에서 cbuf[off]부터 len개까지의 문자를 보냄 |
void | write(String str) | 매개값으로 주어진 문자열을 보냄 |
void | write(String str, int off, int len) | 매개값으로 주어진 문자열에서 off순번부터 len개까지의 문자를 보냄 |
void | flush() | 버퍼에 잔류하는 모든 문자를 출력 |
void | close() | 출력 스트림을 닫는다. |
🍀 write(int c) 메소드는 매개 변수로 주어지는 int(4byte)
에서
끝 2byte(1개의 문자)
만 출력 스트림으로 보내진다.
📍한문자씩 출력하기
import java.io.FileWriter;
import java.io.Writer;
public class WriteExample {
public static void main(String args[]) {
Writet writer = new FileWriter("C:/Temp/test8.txt");
char[] array = { 'A', 'B' , 'C' };
writer.write(array); //배열의 모든 문자를 출력
writer.flush();
writer.close();
}
}
📍결과는 파일 탐색기에서 볼 수 있다.
🍀 write(char[] cbuf, int off, int len) 메소드는 c[off]
부터 len개의 문자
를 출력 스트림으로 보낸다.
🍀writer는 문자열을 좀 더 쉽게 보내기 위해
서 write(String str)
와 write(String str, int off, int len)
메소드를 제공한다.
🍀write(String str)은 문자열 전제 출력 스트림으로 보내고, write (String str, int off, int len)
은 주어진 문자열 off순번부터 len개까지의 문자를 보낸다.
🍀 Reader 는 문자 기반 입력 스트림
의 최상위 클래
스로 추상 클래스
이다.
🍀리턴 타입 | 🍀메소드 | 🍀설명 |
---|---|---|
int | read() | 1개의 문자를 읽고 리턴 |
int | read(char[] cbuf) | 읽은 문자들을 매개값으로 주어진 문자 배열에 저장, 읽은 문자수를 리턴 |
int | read(char[] cbuf, int off, int len) | len개의 문자를 읽고 매개값으로 주어진 문자 배열에서 cbuf[off]부터 len개까지 저장, 그리고 읽은 문자수 리턴. |
int | close() | 입력 스트림 닫기 |
🍀 read() 메소드는 입력 스트림으로부터 1개의 문자(2byte)
를 읽고 int(4byte)타입
으로 리턴
🍀read() 메소드가 리턴한 int값
을 char타입
으로 변환하면 읽은 문자 얻기⭕
char charDate = (char) read();
🍀 read(char cbuf) 메소드는 입력 스트림으로
부터 매개값
으로 주어진 문자 배열의 길이만큼
문자를 읽고 배열에 저장. 그리고 읽은 문자 수를 리턴
🍀read(char[] cbuf, int off, int len) 메소드는 입력 스트림으로부터 len개의 문자만큼
읽고 매개값으로 주어진 문자 배열에서 cbuf[off]
부터 len개
까지 저장.
Reader reader = ...;
char[] cbuf = new char[100];
int readCharNo=is.read(cbuf);
Reader reader = ...;
char[] cbuf = new char[100];
int readCharNo=is.read(cbuf, 0, 100);
🍀입출력 스트림
도착지
냐 출발지냐
에 따라 스트림 종류가 결정
됨.도착지
이면 흘러온 데이터를 입력받아야
하므로 입력 스트림
사용출발지
면 데이터를 출력해야 하므로 출력 스트림
사용.🍀 InputStream
바이트 기반
입력 스트림의 최상위 클래스
로 추상 클래스
이다.모든 바이트기반
입력 스트림은 InputStream 클래스를 상속
받아 만들어짐.🍀OutputStream
바이트 기반
입력 스트림의 최상위 클래스
로 추상 클래스
이다.모든 바이트기반
출력 스트림은 OutputStream 클래스를 상속
받아 만들어짐.🍀Reader
문자 기반
입력 스트림의 최상위 클래스로 추상 클래스 이다.모든 문자 기반
입력 스트림은 Reader 클래스를 상속
받아 만들어짐.🍀Writer
문자 기반
입력 스트림의 최상위 클래스로 추상 클래스 이다.모든 문자 기반
입력 스트림은 Writer 클래스를 상속
받아 만들어짐.📍마무링~
여기까지 길었지만 짧았던 혼공자바 혼공단이 마무리 되었다.
사실 마지막 미션을 하면서 필수 미션은 아니지만 선택적 미션을 꼭 하고 싶었는데 내가 아직 거기까지 하기에는 좀 더 공부를 해야겠다는 생각이 들어 나중에 꼭 다시 블로그를 쓸 계획이다. 9기 홍공단은 끝이 났지만 계속해서 나올 혼공단을 기대하고 나는 꾸준히 혼자 공부를 열심히 할 계획이다.!!! 짧은 시간안에 이 두꺼운 책을 끝낼 수 있을까 하는 고민도 있었지만 혼공족장님의 먹을것 조공!!과 계획을 잘 짜지 못하는 극 mbti p에게 계획을 세워주셔서 감사할 따름이다!
번외편..
내 자아..
끼약 끝낫어ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ끼야야야야갸ㅐ갸갸야갹ㅇ