지직전기

[데이터베이스] 데이터 입출력 (Stream) 본문

STUDY/DataBase

[데이터베이스] 데이터 입출력 (Stream)

MSH103 2024. 1. 30. 13:43

입력스트림과 출력 스트림

프로그램을 기준으로 데이터가 들어오면 입력 스트림, 나가면 출력스트림

프로그램이 다른 프로그램과 데이터를 교환하려면 양쪽 모두 입력 스트림과 출력 스트림이 필요

바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용

문자 스트림 : 문자만 입출력할 때 사용

JAVA는 데이터 입출력과 관련된 라이브러리를 java.io 패키지에서 제공

 

OutputStream

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

모든 바이트 출력 스트림 클래스는 이 OutputStram 클래스를 상속받아서 만들어짐

OutputStram 클래스에는 모든 바이트 출력 스트림이 기본적으로 가져야 할 메소드가 정의됨

OutputStream스트림 메소드

1바이트 출력

write(int b) 메소드 : 매개값 int(4byte)에서 끝 1byte만 출력. 매개변수는 int 타입

바이트 배열 출력

write(byte[] b) 메소드 : 매개값으로 주어진 배열의 모든 바이트를 출력

배열의 일부분을 출력하려면 write(byte[] b, int off, int len) 메소드를 사용

 

InputStream

InputStream은 바이트 입력 스트림의 최상위 클래스로, 추상 클래스

모든 바이트 입력 스트림은 inputStram 클래스를 상속받아 만들어짐

InpuStream 클래스에는 바이트 입력 스트림이 기본적으로 가져야 할 메소드가 정의됨

InputStream 메소드

1바이트 입력

read() 메소드 : 입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴. 리턴된 4byte 중 끝 1byte에만 데이터가 들어있음

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

바이트 배열 읽기

read(byte[] b) 메소드 : 입력 스트림으로부터 주어진 배열이 길이만큼 바이트를 읽고 배

열에 저장한 다음 읽은 바이트 수를 리턴

read(byte[] b)도 입력 스트림으로부터 바이트를 더 이상 읽을 수 없다면 -1을 리턴
읽을 수 있는 마지막 바이트까지 반복해서 읽을수 있음

데이터 입출력 예제

// 입력 예시 (c:/temp/test2.text 파일에 10, 20, 30, 40, 50이라는 데이터값을 입력)
public class WriterEx01 {
    public static void main(String[] args) {
        try {
            OutputStream os = new FileOutputStream("C:/Temp/test2.text");
            byte[] a = {10, 20, 30, 40, 50};

            os.write(a, 1, a.length - 1);
            os.flush();
            os.close();

        } catch (IOException io) {
          io.printStackTrace();
        }
    }
}

//출력 예시
public class ReadEx01 {
    public static void main(String[] args) {
        try {
        InputStream is = new FileInputStream("C:/Temp/test2.text");
            while (true) {
                int b = is.read();
                if (b == -1) {  // EoF : 파일의 끝(-1을 리턴)
                    break;
                }
                System.out.println(b + " ");
            }
            is.close();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException io){
            io.printStackTrace();
            }

        }
    }

// 파일 복사
public class FileCopyEx01 {
    public static void main(String[] args) {
        String originFileName = "C:/Temp/imageEx.jpg";
        String targetFileName = "C:/Temp/imageEx2.jpg";
        try {

            InputStream is = new FileInputStream(originFileName);
            OutputStream os = new FileOutputStream(targetFileName);
/*            byte[] data = new byte[30919];    --> 사진파일 복사
//            while (true) {
//                int num = is.read(data);
//                if (num == -1) {
//                    System.out.println("copyEnd!");
//                    break;
//                }
//                os.write(data, 0, num);
            } */
            is.transferTo(os);  //Java 9버전부터 추가된 기능(위에 주석문을 대체)
            os.flush();
            is.close();
            os.close();
        }catch (IOException io){
            io.printStackTrace();
        }
    }
}

 

 

Writer(문자 출력 스트림)

Writer는 문자 출력 스트림의 최상위 클래스로, 추상클래스이다. 모든 문자 출력 스트림 클래스는 Writer 클래스를 상속.

Writer 클래스에는 모든 문자 출력 스트림이 기본적으로 가져야 할 메소드가 정의됨

Writer 클래스 메소드

 

Reader(문자 입력 스트림)