코딩 기록들
[자바의 다양한 기능들] 7.3 바이트 단위 입출력 스트림 (InputStream) 본문
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() : 입력 스트림과 연결된 대상 리소스를 닫음
FileInputStream 예제
예제 1) 파일에서 한 바이트씩 자료 읽기
public class FileInputStreamTest1 {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("input.txt");
// read는 int로 표현됨
System.out.println((char)fis.read());
System.out.println((char)fis.read());
System.out.println((char)fis.read());
} catch (IOException e) {
System.out.println(e);
} finally{
try {
fis.close();
} catch (IOException e) {
System.out.println(e);
} catch (NullPointerException e){
System.out.println(e);
}
}
System.out.println("end");
}
}
txt파일 만들어주기 (같은 프로젝트 안에)
input.txt
ABC
출력결과
A
B
C
end
예제 2) 파일의 끝까지 한 바이트씩 자료 읽기
public class FileInputStreamTest2 {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("input.txt")){ //이렇게 resource를 안에다 넣으면 auto close되기때문에 별도의 close 안해도 됨
int i;
// end of file 까지 읽기
while ( (i = fis.read()) != -1){ // end of file 이 -1을 반환하므로
System.out.println((char)i);
}
System.out.println("end");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 파일에서 바이트 배열로 자료읽기 (*배열에 남아있는 자료가 있을수 있음에 유의할 것)
public class FileInputStreamTest3 {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input2.txt")){
// byte array를 만들어서 읽기
byte[] bs = new byte[10];
int i;
// file의 끝까지 읽기
while ( (i = fis.read(bs)) != -1){ //byte수(= i)가 -1 = end of file이라는 의미
// case 1
/*for(byte b : bs){ //이렇게하면 버퍼에 남아있는 값이 함께 출력됨
System.out.print((char)b);
}*/
// case 2
for(int k= 0; k<i; k++){ // 읽은 i 개수만큼만 출력되도록(i반환값 이용)
System.out.print((char)bs[k]);
}
System.out.println(": " +i + "바이트 읽음" );
}
// case 3
/*while ( (i = fis.read(bs, 1, 9)) != -1){
for(int k= 0; k<i; k++){
System.out.print((char)bs[k]);
}
System.out.println(": " +i + "바이트 읽음" );
}*/
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("end");
}
}
input2.txt 파일 만들기 (같은 프로젝트에!)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
출력결과
case 1 | case 2 | case 3 |
ABCDEFGHIJ : 10바이트 읽음 KLMNOPQRST : 10바이트 읽음 UVWXYZQRST : 10바이트 읽음 |
ABCDEFGHIJ : 10바이트 읽음 KLMNOPQRST : 10바이트 읽음 UVWXYZ : 6바이트 읽음 |
ABCDEFGH : 9바이트 읽음 JKLMNOPQ : 9바이트 읽음 STUVWXY : 8바이트 읽음 |
자료출처
fastcampus
한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
'Java' 카테고리의 다른 글
[Java Programming] 1.1 이클립스 설정 (0) | 2024.01.17 |
---|---|
[자바의 다양한 기능들] 7.4 바이트 단위 입출력 스트림(OutputStream) (0) | 2024.01.17 |
[자바의 다양한 기능들] 7.2 표준 입출력 스트림 (0) | 2024.01.11 |
[자바의 다양한 기능들] 7.1 자바의 입출력을 위한 I/O stream (1) | 2024.01.11 |
[자바의 다양한 기능들] 6-2. 예외처리하기와 미루기(2) (1) | 2024.01.09 |