Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Sharpie1330

혼공챌린지 6주차 본문

한빛미디어 혼공챌린지

혼공챌린지 6주차

Sharpie1330 2021. 8. 15. 23:49

드디어 마지막!!!! 길고 긴... 그치만 엄청 빠르게 지나갔던 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주간 잘 버텨내어서 다행이다.

보람찬 활동이었다!!

'한빛미디어 혼공챌린지' 카테고리의 다른 글

혼공챌린지 5주차  (0) 2021.08.08
혼공챌린지 4주차  (0) 2021.07.31
혼공챌린지 3주차  (0) 2021.07.25
혼공챌린지 2주차  (0) 2021.07.17
혼공챌린지 1주차  (0) 2021.07.10