Sharpie1330
혼공챌린지 6주차 본문
드디어 마지막!!!! 길고 긴... 그치만 엄청 빠르게 지나갔던 6주가 끝났다
6주간 엄청난 변화를 겪었는데, 팀작업도 시작하고 혼공자도 하고 이것저것 공부도 하고 아주 알차게 보낸 것 같다.
그 사이 약간은 발전한 것 같아서 기분이 좋다!!
아 그리고 기계식 키보드를 샀다 ㅎㅎ 타건감 짱~~~
더욱 멋진 개발자가 되어야지...
대망의 마지막 미션...
6주차 | Chapter 14 | 입출력 스트림 요약 정리 포스팅 | p.632 문제 2번 풀이 인증샷 |
기본미션 - 입출력 스트림 요약 정리 포스팅
입출력 스트림의 종류
- 바이트 기반 스트림 : 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용
- 문자 기반 스트림 : 문제 데이터를 읽고 출력할 때 사용
스트림 클래스가 바이트 기반인지, 문자 기반인지를 구별하려면
> 최상위 클래스 확인!
구분 | 바이트 기반 스트림 | 문자 기반 스트림 | ||
입력 스트림 | 출력 스트림 | 입력 스트림 | 출력 스트림 | |
최상위 클래스 | InputStream | OutputStream | Reader | Writer |
하위 클래스(예) | XXXInputStream (FileInputStream) |
XXXOutputStream (FileOutputStream) |
XXXReader (FileReader) |
XXXWriter (FileInputStream) |
바이트 출력 스트림 : OutputStream
- 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스
- 모든 바이트 기반 출력 스트림은 OutputStream 클래스를 상속받아 만들어짐
- FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream
- 모든 바이트 기반 출력 스트림이 기본적으로 가져야 할 메소드가 정의되어 있다.
리턴 타입 | 메소드 | 설명 | ||
void | write(int b) | 매개변수로 주어지는 int에서 마지막 1byte를 출력 스트림으로 보냅니다. (매개변수가 4byte의 int형이지만 4byte를 모두 보내는 것은 아님) | ||
void | write(byte[] b) | 매개값으로 주어진 배열 b의 모든 바이트를 출력 스트림으로 보냅니다. | ||
void | write(byte[] b, int off, int len) | 매개값으로 주어진 배열 b[off]로부터 len개까지의 바이트를 출력 스트림으로 보냅니다. | ||
void | flush() | 출력 버퍼에 잔류하는 모든 바이트를 출력합니다. | ||
void | close() | 출력 스트림을 닫습니다. |
바이트 입력 스트림 : InputStream
- 바이트 기반 입력 스트림의 최상위 클래스이며 추상 클래스
- 모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속받아 만들어짐
- FileInputStream, BufferedInputStream, DataInputStream
- 모든 바이트 기반 입력 스트림이 기본적으로 가져야 할 메소드가 정의되어 있음
리턴 타입 | 메소드 | 설명 | ||
int | read() | 입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴. 리턴된 4byte 중 마지막 1byte에만 데이터가 들어 있습니다. 더 이상 바이트를 읽을 수 없다면 -1을 리턴합니다. | ||
int | read(byte[] b) | 입력 스트림으로부터 매개 값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장하고 읽은 바이트 수를 리턴. 읽은 바이트 수가 배열의 길이보다 적을 경우 읽은 수만큼만 리턴합니다. 입력 스트림으로부터 바이트를 더 이상 읽을 수 없다면 -1을 리턴합니다. | ||
int | red(byte[] b, int off, int len) | 입력 스트림으로부터 len개의 바이트 만큼 읽고 매개값으로 주어진 바이트 배열 b[off] 부터 len개 까지 저장하고 읽은 바이트 수인 len을 반환. 실제로 읽은 바이트 수가 len 개보다 작다면 읽은 수만큼만 반환합니다. 입력 스트림으로부터 바이트를 더 이상 읽을 수 없다면 -1을 리턴합니다. read(byte[] b)와 달리 한번에 읽어 들이는 바이트 수를 len 매개 값으로 조절할 수 있고, 배열에서 저장이 시작되는 인덱스를 저장할 수 있습니다. | ||
void | close | 입력 스트림을 닫습니다. |
문자 출력 스트림: Writer
- 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스
- 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속
- FileWriter, BufferdWriter, PrintWriter, OutputStreamWriter
- 모든 문자 기반 출력 스트림이 기본적으로 가져야 할 메소드 정의
리턴 타입 | 메소드 | 설명 |
void | write(int c) | 매개변수 int에서 마지막 2byte (1개의 문자)만 출력 스트림으로 보냅니다. |
void | write(char[] cbuf) | 매개 값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냅니다. |
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() | 출력 스트림 닫음 |
문자 입력 스트림: Reader
- 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스
- 모든 문자 기반 입력 스트림은 Reader 클래스를 상속
- FileReader, BufferedReader, InputStreamReader
- 문자 기반 입력 스트림이 기본적으로 가져야 할 메소드 정의
리턴 타입 | 메소드 | 설명 |
int | read() | 입력 스트립으로부터 1개의 문자(2byte)를 읽고 int(4byte) 타입으로 리턴합니다. 더이상 입력 스트림으로부터 문자를 읽을 수 없다면 -1을 리턴합니다. |
int | read(char[] cbuf) | 입력 스트림으로부터 매개값으로 주어진 문자 배열의 길이만큼 문자를 읽고 배열에 저장하고, 읽은 문자 수를 리턴합니다. 실제로 읽은 문자 수가 배열의 길이보다 적다면 읽은 수만큼 리턴합니다. 입력 스트림으로부터 문자를 더 이상 읽을 수 없다면 -1을 리턴합니다. |
int | read(char[] cbuf, int off, int len) | 입력 스트림으로부터 len개의 문자만큼 읽고 매개값으로 주어진 문자 배열에서 cbuf[off]부터 len개까지 저장, 읽은 무자 수인 len개를 리턴합니다. 실제로 읽은 문자 수가 len개보다 적을 경우에는 읽은 수만큼만 리턴합니다. 입력 스트림으로부터 문자를 더 이상 읽을 수 없다면 -1을 리턴합니다. |
void | close() | 입력 스트림을 닫습니다. |
선택미션 - p.632 문제 2번 풀이 인증샷
문제)
FileReader와 BufferedReader를 이용해서 source.txt 내용을 읽고, 각 라인 번호를 추가해 모니터로 출력하는 프로그램을 작성해보세요.
소스 코드 - AddLineNumverExample.java
package sec02.verify.exam02;
import java.io.BufferedReader;
import java.io.FileReader;
public class AddLineNumberExample {
public static void main(String[] args) throws Exception {
String filePath = "src/sec02/verify/exam02/AddLineNumberExample.java";
...
}
}
정답
package sec02.verify.exam02;
import java.io.BufferedReader;
import java.io.FileReader;
public class AddLineNumberExample {
public static void main(String[] args) throws Exception {
String filePath = "src/sec02/verify/exam02/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();
}
}
실행결과
왜인지 intellij에서는 문제가 발생해서... eclipse에서 실행함
6주간의 혼공챌린지가 드디어 끝이 났다.
중간에 멈추는 일 없이 6주간 잘 버텨내어서 다행이다.
보람찬 활동이었다!!