본문 바로가기
Java/자바 Stream

[Java] 80. 바이트 기반의 파일 입력 스트림

글: Song hyun 2024. 5. 14.
728x90
반응형

[Java] 80. 바이트 기반의 파일 입력 스트림

1. 파일 입력 스트림이란?

2. 파일 입력 스트림의 작동 방식

 


1. 파일 입력 스트림이란?

(1) 기반 스트림(Base Stream) : 데이터 소스와 직접 연결되는 스트림으로, 실제 데이터 읽기나

-바이트 기반 스트림

-문자 기반 스트림

 

(2) 보조 스트림(Filter Stream)

-버퍼링

-데이터 변환

-객체 직렬화

-문자 인코딩

 

*기반 스트림과 보조 스트림은 종속적인 관계이다.

 

 

2. 파일 입력 스트림의 작동 방식

(1)

(2)

(3)


package io.file.ch01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class MyFileInputStream {
	
	public static void main(String[] args) {
		
		// 외부에 있는 파일 데이터를 읽으려면 input이라는 행동 필요
		FileInputStream in = null;
		
		try {
			in = new FileInputStream("a.txt");
			// 1단계
			//int readData = in.read();
			
			// 2단계
			//System.out.print((char)in.read());
			//System.out.print((char)in.read());
			//System.out.print((char)in.read());
			
			// 3단계
			// 읽을 데이터가 더이상 없다면 -1을 반환한다.
			int readData;
			while((readData = in.read())!=-1) {
				System.out.println((char)readData);
			}
			
			// 4단계 FileInputStream(기반 스트림) 대상에 접근해서
			// 한 바이트씩 읽는 기능을 가진다.
			// 1byte: 127~ -128 정수값 : a-->97, A-->65
			// 대-->정수값 얼마일까?
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}
package io.file.ch01;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class MyBufferedInputStream {

	public static void main(String[] args) {
		
		// 보조 스트림의 사용 -> 반드시 기반 스트림이 필요하다.
		
		
		FileInputStream fin = null;
		BufferedInputStream bfin = null;
		
		try {
			// 기반 스트림
			fin = new FileInputStream("a.txt");
			
			// 보조 스트림(기반 스트림)
			bfin = new BufferedInputStream(fin);
			
			int data;
			while((data = bfin.read()) != -1) {
				System.out.println((char)data);
			}
			
			
		} catch (Exception e) {
			// 리소스 자원 정리
			// 열었던 자원의 순서를 반대로 닫아주자.
			if(bfin!=null) {
				try {
					bfin.close();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
			
			if(fin  != null) {
				try {
					fin.close();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}

			
		}

	}

}
728x90
반응형