본문 바로가기

[혼공단 10기] 자바

[혼공단 10기] 자바 6주차 미션! 완주!

얏호~

어느덧 마지막 6주차입니다~~

 

이제 혼공단 마지막 미션이네요~

 

 

14 | 입출력 스트림

 

 

길고도 짧게 느껴졌던 6주차(여름방학 포함 7주차) 였습니다!

 

혼자 공부하는 자바를 공부하면서 책 한 권을 끝까지 볼 수 있어서 너무나도 좋은 기회였습니다~!

 

1주차 학습 스케줄 계획만큼 성실하게 수행하진 못했지만 

 

그래도 끝까지 포기하지 않고 참여해서 뿌듯합니다ㅎㅎㅎ

 

다음 기회가 있다면 또 참여하고 싶은 값진 경험이었습니다~!

 

마지막 미션입니다~!

 

 


[기본 미션] 입출력 스트림 요약 정리하여 포스팅하기 

 

입출력 스트림

자바에서 데이터는 스트림을 통해 입출력된다.

스트림은 단일 방향으로 연속적 흐름이며, 데이터는 출발지에서 도착지로 흘러간다.

 

입출력 스트림의 종류

  • 바이트 기반 스트림 : 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용
  • 문자 기반 스트림 : 문자 데이터를 읽고 출력할 때 사용

바이트 기반 스트림

최상위 클래스 : 입력 스트림 _ InputStream, 출력 스트림 _ OutputStream

하위 클래스 : Ex) 이미지와 같은 바이너리 파일의 입출력 스트림 클래스, FileInputStream/FileOutputStream

 

바이트 출력 스트림: OutputStream

OutputStream : 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스

- 모든 기반 출력 스트림 클래스는 OutputStream 클래스를 상속받아서 만들어짐

- FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream

  • write(int b) 메소드 : 매개 변수로 주어지는 int(4byte)에서 끝 1byte만 출력 스트림으로 보냄
  • write(byte[] b) 메소드 : 매개값으로 주어진 배열의 모든 바이트를 출력 스트림으로 보냄
  • write(byte[] b, int off, int len) 메소드 : b[off]부터 len 개의 바이트를 출력 스트림으로 보냄

 

바이트 입력 스트림: InputStream

InputStream : 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스

- 모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속받아서 만들어짐

- FileInputStream, BufferedInputStream, DataInputStream

  • read() 메소드 : 입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴
  • read(byte[] b) 메소드 : 입력 스트림으로부터 매개값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장, 읽은 바이트 수를 리턴.
  • read(byte[] b, int off, int len) 메소드 : 입력 스트림으로부터 len 개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장, 읽은 바이트 수인 len 개를 리턴

 

문자 출력 스트림: Writer

Writer : 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스

- 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속받아서 만들어짐

FileWriter, BufferedWriter, PrintWriter, OutputStreamWriter

  • write(int c) 메소드 : 매개 변수로 주어지는 int(4byte)에서 끝 2byte(1개의 문자)만 출력 스트림으로 보냄
  • write(char[] cbuf) 메소드 : 매개값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냄
  • write(char[] cbuf, int off, int len) 메소드 : c[off]부터 len개의 문자를 출력 스트림으로 보냄
  • write(String str) 메소드 : 문자열 전체를 출력 스트림으로 보냄
  • write(String str, int off, int len) 메소드 : 주어진 문자열 off 순번부터 len 개까지의 문자를 보냄

 

문자 입력 스트림: Reader

Reader : 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스

- 모든 문자 기반 입력 스트림은 Reader 클래스를 상속받아서 만들어짐

- FileReader, BufferedReader, InputStreamReader

  • read() 메소드 ; 입력 스트림으로부터 1개의 문자(2byte)를 읽고 int(4byte) 타입으로 리턴
  • read(char[] cbuf) 메소드 : 입력 스트림으로부터 매개값으로 주어진 문자 배열의 길이만큼 문자를 읽고 배열에 저장
  • read(char[] cbuf, int off, int len) 메소드 : 입력 스트림으로부터 len개의 문자만큼 읽고 매개값으로 주어진 문자 배열에서 cbuf[off]부터 len개까지 저장

 

 


[선택 미션] p. 632 문제 2번 풀고, 풀이 과정 설명하기

조건

FileReader와 BufferedReader를 이용해서 source.txt 내용읽기

source.txt 내용을 모니터로 출력하는 프로그램

 

source.txt 파일 생성하기

접근성이 좋도록 D 드라이브에 저장했습니다.

D:\source.txt

 

실행코드

package sec02.verify.exam02;

import java.io.BufferedReader;
import java.io.FileReader;

public class AddLineNumberExample {

	//FileReader와 BufferedReader를이용해서 source.txt 내용읽기
	//추가 코드 대략 10줄로 예상
	//source.txt 내용을 모니터로 출력하는 프로그램
	public static void main(String[] args) throws Exception {
		//throws Exception: 예외 처리를 위한 코드, 해당 코드 블록{}에서 발생하는 예외를 상위 호출자에게 전달
		String filePath = "src/sec02/verify/exam02/AddLineNumberExample.java";
		//filePath : 읽어올 파일의 경로를 변수에 저장, 
		//상대 경로로 저장, 해당 코드가 위치한 디렉토리의 경로를 나타냄
		BufferedReader reader = new BufferedReader(
			new FileReader("D:\\source.txt")
			//불러오는 파일 경로 작성
		);
		//파일을 읽기 위한 reader 객체 생성
		//FileReader : 파일을 문자 단위로 읽어오는 역할
		//BufferedReader : 읽어온 데이터를 버퍼링하여 효율적인 입출력을 제공
		
		String str;
		//읽어온 한 줄의 문자열을 저장할 변수 str 선언
		while((str = reader.readLine()) != null) {
		//파일을 줄 단위로 읽어오는 루프를 시작
		//reader.readLine() : 파일에서 한 줄씩 읽어오는 메소드
		//읽어온 내용을 str에 저장
		//파일의 끝에 도달하면 null을 반환
		//파일의 끝에 도달할 때까지 루프가 실행됨
			System.out.println(str);
			//읽어온 한 줄의 내용을 담은 str을 화면에 출력
		}
		reader.close();
		//파일읽기가 끝나면 reader를 닫음
	}
}

 

실행결과

 

 

source.txt의 내용이 출력되었습니다~!

 


 

너무나도 늦게 과제를 수행했는데요

 

그래도 혼공단 덕분에 책 한권을 끝까지 살펴볼 수 있었고, 

전체적인 내용 파악이 가능했습니다.

 

다른 분들이 올리는 게시글을 보면서 

'이렇게도 작성할 수 있구나, 이렇게 접근할 수도 있구나' 

하며 새로운 공부방법 등을 깨달을 수 있었습니다.

 

과제를 포기할까 하다가도 늦어져도 차근차근 올리는 분들 덕분에 의지를 다시잡고 수행할 수 있었구요.

덕분에 6주차 과제를 모두 참여할 수 있었네요.

 

공부를 하며, 과제를 수행하면서 성취감을 느꼈고, 

내가 해낼 수 있는 사람이구나라고 생각할 수 있게된 값진 경험이었습니다.

 

다음에 또 기회가 된다면 

그때는 다른 혼공 과목으로 참여하고 싶네요.

 

 

즐거웠습니다~!

혼공단 참여하시는 분들 원하는 미래를 이루시길 바랍니다.

감사합니다~!!