본문 바로가기
언어/JAVA

바이트 단위 입출력 스트림

by step 1 2021. 5. 23.
반응형

InputStream

  • 바이트 단위 입력 스트림 최상위 추상 클래스
  • 많은 추상 메서드가 선언되고 있고 이를 하위 스트림이 상속받아 구현함

주요 하위 클래스

스트림 클래스 설명
FileInputStream 파일에서 바이트 단위로 자료를 읽습니다
ByteArrayInputStream byte 배열 메모리에서 바이트 단위로 자료를 읽습니다
FilterInputStream 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림의 상위 클래스

주요 메서드

메서드 설명
int read() 입력 스트림으로부터 한 바이트의 자료를 읽습니다. 읽은 자료의 바이트 수를 반환합니다
int read(byte b[]) 입력 스트림으로 부터 b[] 크기의 자료를 b[]에 읽습니다. 읽은 자료의 바이트 수를 반환합니다
int read(byte b[], int off, int len) 입력 스트림으로 부터 b[] 크기의 자료를 b[]의 off 변수 위치부터 저장하며 len 만큼 읽습니다. 읽은 자료의 바이트 수를 반환합니다
void close() 입력 스트림과 연결된 대상 리소스를 닫습니다

 

파일에서 한 바이트씩 자료 읽기

FileInputStreamTest1.java

package ch60;

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

public class FileInputStreamTest1 {

	public static void main(String[] args) {
		FileInputStream fis = null;
		try {
			fis = new FileInputStream("input.txt");
			System.out.println((char)fis.read());
			System.out.println((char)fis.read());
			System.out.println((char)fis.read());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (Exception e2) {
				// TODO: handle exception
				System.out.println(e2);
			}
		}
		
		System.out.println("end");
	}
}

 

파일의 끝까지 한 바이트씩 자료 읽기

FileInputStreamTest.java

package ch60;

import java.io.FileInputStream;

public class FileInputStreamTest {

	public static void main(String[] args) {
		
		int i;
		try(FileInputStream fis = new FileInputStream("input.txt")) {
			
			while( (i = fis.read()) != -1) {
				System.out.print((char)i);
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		
	}
}

input.txt 파일 생성

 

파일에서 바이트 배열로 자료 읽기(배열에 남아 있는 자료가 있을 수 있음에 유의)

FileInputStreamTest2.java

package ch60;

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

public class FileInputStreamTest2 {

	public static void main(String[] args) {
		
		int i;
		try(FileInputStream fis = new FileInputStream("input2.txt")) {
			
			byte[] bs = new byte[10];
			
//			10바이트씩 읽도록 지정
			while((i = fis.read(bs)) != -1) {
//			시작 번호와 읽을 크기 지정
//			while((i = fis.read(bs, 0, 9)) != -1) {

//				읽은 갯수 만큼만 가져오도록				
				for (int j = 0; j < i; j++) {
//					System.out.print((char)ch);

					System.out.print((char)bs[j]);
				}
				
				System.out.println(" : " + i + "바이트 읽음");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		
	}
}

 

반응형