본문 바로가기
개발 수업/JAVA

[Java] 입출력 스트림/InputStream

by 오늘 하루s 2023. 5. 26.
728x90
더보기

Day21-2. 230526

입출력 스트림

바이트 입력 스트림 : InputStream

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

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

- FileInputStream, BufferedputStream, DataInputStream 클래스는 모두 InputStream 클래스를 상속하고 있음.

 

  •  InputStream 클래스의 주요 메소드

 

read() 메소드

입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴.

리턴된 4byte 중 끝의 1byte에만 데이터가 들어 있음.

더 이상 입력 스트림으로부터 바이트를 읽을 수 없다면 read() 메소드는 -1을 리턴, 이것을 이용하면 읽을 수 있는 마지막 바이트까지 반복해서 1byte씩 읽을 수 있음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package chap14;
 
import java.io.FileInputStream;
import java.io.InputStream;
 
public class Read01 {
 
    public static void main(String[] args) throws IOException {
        // 1byte씩 읽기-read()
        InputStream is = new FileInputStream("C:\\javaStudy\\test.db");
        while(true) {
            int data = is.read();
            if(data==-1break;
            System.out.println(data);
        }
        is.close();
    }
}
cs
 
* 실행 결과
10
20
30

전 게시물에서 생성한 C:\\javaStudy\\test.db에 저장된 내용을 1byte씩 끝까지 읽음.

 

10라인은 데이터 출발지를 test.db로 하는 바이트 가반의 파일 입력 스트림을 생성하고 InputStream타입 변수에 대입.

FileInputStream은 자식 클래스이므로 자동 타입 변환.

11~14라인은 InputStream으로 반복해소 1byte씩 읽고 모니터에 출력.

16라인 InputStream을 더 이상 사용하지 않겠다는 의미로 close() 메소드 호출.

 

read(byte[] b) 메소드

입력 스트림으로부터 매개값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장. 그리고 읽은 바이트 수를 리턴.

실제로 읽은 바이트 수가 배열의 길이보다 적을 경우, 읽은 수만큼 리턴.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package chap14;
 
import java.io.FileInputStream;
import java.io.InputStream;
 
public class Read017 {
 
    public static void main(String[] args) throws IOException {
       // byte배열 전체 읽기-read(byte[])
        InputStream is2 = new FileInputStream("C:\\javaStudy\\test2.db");
        byte[] buffer = new byte[100];
        while(true) {
            int data = is2.read(buffer);
            if(data==-1break
            for(int i=0; i<data; i++) {
            System.out.println(buffer[i]);
            }
        }
        is2.close();    
  }
}
cs
더보기

* 실행 결과10
20
30

 

read(byte[] b, int off, int len) 메소드

입력 스트림으로부터 len개의 바이트만큼 읽고,

매개값으로 주어진 바이트 배열 b[off]부터 len개 까지 저장하고읽은 바이트 수인 len개를 리턴

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package chap14;
 
import java.io.FileInputStream;
import java.io.InputStream;
 
public class Read01 {
 
    public static void main(String[] args) throws IOException {
        // byte배열 일부 읽기-read(byte[],int 시작인덱스,int 개수)
        InputStream is3 = new FileInputStream("C:\\javaStudy\\test3.db");
        byte[] buffer3 = new byte[5];
        while(true) {
            int data = is3.read(buffer3,2,3); //입력 스트링(is3)으로부터 3byte읽고 buffer3[2],buffer3[3]buffer3[4]에 저장
            if(data==-1break
            for(int i=0; i<buffer3.length; i++) {
                System.out.println(buffer3[i]);
            }
        }
        is3.close();
   }
}    
cs
더보기

* 실행 결과

0
0
100
110
120
0
0
122
124
120

728x90