자바

1. 입출력 스트림이란(I/O Stream)?

 - 컴퓨터 공학에서 스트림은 연속적인 데이터의 흐름을 의미합니다.

 

 - 입력 스트림은 키보드, 네트워크 등과 같은 입력 장치와 연결되어 입력 장치로부터

    입력된 데이터가 프로그램으로 흘러가게 합니다

 

 - 출력 스트림은 자바 프로그램에서 출력되는 데이터를 LCD 스크린, 네트워크 장치, 프린터 등과

    같은 장치에 순서대로 흘러가게 합니다.

 

 - 입출력 스트림을 통해 흘러가는 데이터의 기본 단위는 바이트(Byte)입니다.

 

 

 

2. 입출력 스트림의 특징

 - 입력 스트림은 데이터가 입력 장치에서 자바 프로그램으로 들어가는 방향이며,

    출력 스트림은 자바 프로그램에서 출력 장치로 데이터가 이동하는 방향입니다.

    즉, 스트림은 단방향입니다.

 

 - 입력 스트림에 먼저 들어온 데이터가 프로그램에 먼저 전달되고,

    출력 스트림은 자바 프로그램에서 출력한 순서대로 출력 장치에 보냅니다.

    즉, 선입선출(FIFO) 구조입니다.

 

 

 

3. 바이트 스트림과 문자 스트림의 특징

 - 자바에서 스트림은 바이트 스트림과 문자 스트림으로 나뉩니다.

 

 - 클래스 이름에 Stream이 붙으면 바이트 스트림을 처리하기 위한 클래스이며

    Reader, Writer가 붙으면 문자 스트림을 처리하는 클래스입니다.

 

 - 바이트 스트림은 입출력되는 바이트의 바이너리 값을 있는 그대로 처리하기 때문에

    스트림에 들어오는 데이터가 문자이든 단순 바이너리 정보이든 상관없이 처리할 수 있습니다.

 

 - 하지만, 문자 스트림은 오직 문자만을 다루기 때문에 바이트 정보가 들어오면 오류로 처리합니다.

 

 

 

4. 바이트 스트림

 - 바이트 스트림은 8비트의 바이트 단위로 바이너리 데이터가 흐르는 스트림입니다.

 

 - 바이너리 데이터를 그대로 출력하기 때문에 동영상이나 이미지의 입출력뿐만 아니라

    문자들로 구성되어 있는 텍스트 파일도 입출력할 수 있습니다.

 

 

 4-1. 바이트 입출력 스트림 클래스

InputStream / OutputStream

 - 추상 클래스이며, 바이트 입출력 처리를 위한 기능을 가진 슈퍼 클래스입니다.

 

FileInputStream / FileOutputStream

 - 파일 입출력을 위한 클래스로서, 파일로부터 바이너리 데이터를 읽거나 파일에

    바이너리 데이터를 저장할 수 있습니다.

 

DataInputStream / DataOutputStream

 - boolean, char, byte, int, double 등과 같은 값을 바이너리 형태로 입출력하며

    문자열도 바이너리 형태로 입출력할 수 있습니다.

 

 

 4-2. FileInputStream 클래스의 생성자

 FileInputStream(File file)

 file이 지정하는 파일로부터 입력받는

 FileInputStream 생성 

 FileInputStream(String name)

 name이 지정하는 파일로부터 입력받는

 FileInputStream 생성

 

 

 4-3. InputStream과 FileInputStream의 공통 주요 메소드

 int read()

 입력 스트림에서 한 바이트를 읽어 int형으로 리턴

 int read(byte[] b)

 최대 배열 b의 크기만큼 바이트를 읽음

 실제 읽은 바이트 수 리턴

 int read(byte[] b, int off, int len)

 최대 len개의 바이트를 읽어 b 배열의 off 위치에

 저장, 실제 읽은 바이트 수 리턴

 int available()

 입력 스트림에서 현재 읽을 수 있는

 바이트 수 리턴

 void close()

 입력 스트림을 닫고 관련된 시스템 자원 해제

 

 

 4-4. FileOutputStream 클래스의 생성자

 FileOutputStream(File file)

 file이 지정하는 파일에 출력하는

 FileOutputStream 생성

 FileOutputStream(String name)

 name이 지정하는 파일에 출력하는

 FileOutputStream 생성

 FileOutputStream

 (File file, boolean append)

 FileOutputStream을 생성하며 append가

 true이면 file이 지정하는 파일의 마지막부터

 데이터 저장

 FileOutputStream

 (String name, boolean append)

 FileOutputStream을 생성하며 append가

 true이면 name 이라는 이름을 가진 파일의

 마지막부터 데이터 저장

 

 

 4-5. OutputStream과 FileOutputStream의 공통 주요 메소드

 void write(int b)

 int 형으로 넘겨진 한 바이트를 출력 스트림으로 출력

 void write(byte[] b)

 배열 b의 바이트를 모두 출력 스트림으로 출력

 void write(byte[] b, int off, int len)

 len 크기만큼 off부터 배열 b를 출력 스트림으로 출력

 void flush()

 출력 스트림에서 남아 있는 데이터 모두 출력

 void close()

 출력 스트림을 닫고 관련된 시스템 자원 해제

 

 

 4-6. 바이트 스트림과 바이너리 파일 입출력

  - InputStream 클래스는 추상 클래스이므로 사용할 수 없기 때문에 목적에 따라 이를 상속받은

     FileInputStream이나 DataInputStream 클래스를 이용합니다.

     다음 예제와 같이 파일을 읽을 때는 FileInputStream 클래스를 이용하면 됩니다.

 

 

 

  - 위 프로그램을 출력한 결과는 다음과 같습니다! 파일에 출력했으니 파일을 열어봐야하지요.

 

 

 

  - 에러가 난 것 같지만 아닙니다. 출력 파일인 test.txt에 결과 값을 바이너리로 저장하기 때문에

     메모장으로는 열어서 확인할 수 없습니다.

 

  - 바이너리 파일은 EditPlus같은 텍스트 편집기를 이용해야 확인할 수 있는데, 이때 인코딩 옵션을

     16진수 보기인 Hexviewer로 선택하여 열면 16진수로 표시된 내용을 볼 수 있습니다.

 

 

 

5. 문자 스트림

 - 문자 스트림은 유니코드로 된 문자 단위의 데이터를 다루는 스트림입니다.

 

 - 문자화되지 않는 바이너리 값들은 문자 스트림에 존재할 수 없기 때문에

     이미지 등과 같은 정보는 처리할 수 없습니다.

 

 

 5-1. 문자 입출력 스트림 클래스

Reader / Writer

 - 추상 클래스이며, 문자 입출력 처리를 위한 기능을 가진 슈퍼 클래스입니다.

 

InputStreamReader / OutputStreamReader

 - 이 클래스는 바이트 스트림과 문자 스트림을 연결시켜줍니다.

    지정된 문자 집합을 이용하며 InputStreamReader는 바이트들을 읽어 지정된 문자 집합

    내의 문자로 인코딩하며, OutputStreamReader는 문자를 바이트들로 디코딩하여

    스트림으로 출력합니다.

 

FileReader / FileWriter

 - FileReader와 FileWriter는 텍스트 파일로부터 직접 문자 데이터를 읽고 기록합니다.

    FileReader는 FileInputStream과 연결하여 읽어 들인 바이트를 문자 데이터로 변환하며

    FileWriter는 FileOutputStream을 이용하여 문자 스트림을 바이트 스트림으로

    변환하여 파일에 기록합니다.

 

 

 5-2. InputStreamReader와 FileReader 의 생성자

 InputStreamReader(InputStream in)

 in으로부터 읽는 기본 문자 집합의

 InputStreamReader 생성

 InputStreamReader

 (InputStream in, Charset cs)

 in으로부터 읽는 cs 문자 집합의

 InputStreamReader 생성

 InputStreamReader

 (InputStream in, String charsetName)

 in으로부터 읽는 charsetName 문자 집합의

 InputStreamReader 생성

 FileReader(File file)

 file로부터 읽는 FileReader 생성

 FileReader(String name)

 name 이름의 파일로부터 읽는 FileReader 생성

 

 

 5-3. InputStream과 FileInputStream의 공통 주요 메소드

 int read()

 한 개의 문자를 읽어 정수형으로 리턴

 int read(char[] cbuf)

 문자들을 읽어 cbuf 배열에 저장하고

 읽은 개수 리턴

 int read(char[] cbuf, int off, int len)

 최대 len 크기만큼 읽어 off부터 저장하고

 실제 읽은 개수 리턴

 boolean ready()

 입력 스트림이 문자를 읽어 들일 수 있는

 상태인지 리턴

 String getEncoding()

 스트림이 사용하는 문자 집합의 이름 리턴

 void reset()

 스트림 리셋, 스트림이 마킹되어 있으면

 그 위치부터 시작

 void close()

 입력 스트림을 닫고 관련된 시스템 자원 해제

 

 

 5-4. OutputStreamWriter와 FileWriter의 생성자

 OutputStreamWriter

 (OutputStream out)

 out에 출력하는 기본 문자 집합의

 OutputStreamWriter 생성

 OutputStreamWriter

 (OutputStream out, Charset cs)

 out에 출력하는 cs 문자 집합의

 OutputStreamWriter 생성

 OutputStreamWriter (OutputStream

 out, String charsetName)

 charsetName 문자 집합의

 OutputStreamWriter 생성

 FileWriter(File file)

 file에 데이터를 저장할 FileWriter 생성

 FileWriter(String name)

 name 파일에 데이터를 저장할 fileWriter 생성

 FileWriter(File file, boolean append)

 FileWriter를 생성하며, append가 true이면

 파일의 마지막부터 데이터를 저장

 FileWriter(String name,

 boolean append)

 FileWriter를 생성하며, append가 true이면

 파일의 마지막부터 데이터를 저장

 

 

 5-5. Writer, OutputStreamWriter, FileWriter의 공통 주요 메소드

 void write(int c)

 c를 char로 변환하여 한 개의 문자 출력

 void write(String str, int off, int len)

 인덱스 off부터 len개의 문자를

 str문자열에서 출력

 void write(char[] cbuf, int off, int len)

 인덱스 off부터 len개의 문자를

 배열 cbuf에서 출력

 void flush()

 스트림에 남아 있는 데이터 모두 출력

 String getEncoding()

 스트림이 사용하는 문자 집합의 이름 리턴

 void close()

 입력 스트림을 닫고 관련된 시스템 자원 해제

 

 

 5-6. 문자 스트림과 텍스트 파일 입출력

  - FileReader의 생성자는 File 객체나 문자열이 가리키는 파일과 연결된 문자 스트림을 생성합니다.

 

  - InputStreamReader의 생성자에 InputStream 객체가 전달되며, InputStreamReader는

     InputStream 객체가 파일에서 읽은 바이트 데이터를 문자 집합을 통해 문자로 변환합니다.

 

  - 이를 위해 InputStream의 생성자에는 문자 집합을 지정하는 Charset 객체를 전달합니다.

 

 

 

6. 버퍼 입출력 스트림

 - 입출력 데이터를 일시적으로 저장하는 버퍼를 이용하여 입출력 효율을 개선할 수 있습니다.

 

 - 입출력시 운영체제의 API 호출 횟수를 줄여 입출력 성능을 개선합니다

     * 출력 : 여러 번 출력되는 데이터를 버퍼에 모아두고 한 번에 장치로 출력

     * 입력 : 입력 데이터를 버퍼에 모아두고 한 번에 프로그램에 전달

 

 

 6-1. 버퍼 입출력 스트림 클래스

  - 바이트 버퍼 스트림 : 바이트 단위의 바이너리 데이터를 처리하는 버퍼 스트림입니다.

                                  BufferedInputStream과 BufferedOutputStream이 있습니다.

 

  - 문자 버퍼 스트림 : 유니코드의 문자 데이터만 처리하는 버퍼 스트림입니다.

                               BufferedReader와 BufferedWriter가 있습니다.

 

 

 6-2. 바이트 버퍼 스트림 클래스의 생성자

 BufferedInputStream(InputStream in)

 in을 연결하는 디폴트 크기의 입력

 버퍼 스트림 생성

 BufferedInputStream

 (InputStream in, int size)

 in을 연결하는 size 크기의 입력

 버퍼 스트림 생성

 BufferedOutputStream

 (OutputStream out)

 out을 연결하는 디폴트 크기의 출력

 버퍼 스트림 생성

 BufferedOutputStream

 (OutputStream out, int size)

 out을 연결하는 size 크기의 출력

 버퍼 스트림 생성

 

 

 6-3. 문자 버퍼 스트림 클래스의 생성자

 BufferedReader(Reader in)

 in을 연결하는 디폴트 크기의 문자 입력

 버퍼 스트림 생성

 BufferedReader(Reader in, int sz)

 in을 연결하는 sz 크기의 문자 입력

 버퍼 스트림 생성

 BufferedWriter(Writer out)

 out을 연결하는 디폴트 크기의 문자 출력

 버퍼 스트림 생성

 BufferedWriter(Writer out, int sz)

 out을 연결하는 sz 크기의 문자 출력

 버퍼 스트림 생성

 

 

 6-4. 버퍼 출력 스트림 예제

  - 20바이트 크기의 버퍼를 가지고 System.out 표준 스트림을 이용하여 화면에 출력

 

(실행 결과는 system.ini 파일을 읽은 결과가 콘솔창에 출력됩니다.)

 

 

7. File 클래스

 - File 클래스는 경로명이 java.io.file로서 파일과 디렉터리 경로명의 추상적 표현입니다.

 

 - File 클래스는 파일 삭제, 디렉터리 생성 등과 같은 중요한 파일 관리 작업을 지원합니다.

 

 

 7-1. File 클래스의 생성자

 File(File parent, String child)

 parent 디렉터리에 child 이름의 디렉터리나

 파일을 나타내는 File 객체 생성

 File(String pathname)

 pathname이 나타내는 File 객체 생성

 File(URI uri)

 file:URI를 추상 경로명으로 변환하여

 File 객체 생성

 

 

 7-2. File 클래스의 주요 메소드

 boolean mkdir()

 추상 경로명이 나타내는 새로운 디렉터리 생성

 String[] list()

 추상 경로명이 나타내는 디렉터리 내의 파일과

 디렉터리 이름의 문자열 배열 리턴

 String[] listFiles()

 추상 경로명이 나타내는 디렉터리 내의

 파일 이름의 문자열 배열 리턴

 boolean renameTo(File dest)

 dest가 지정하는 추상 경로명으로 파일 이름 변경

 boolean delete()

 추상 경로명이 나타내는 파일 또는 디렉터리 삭제

 long length()

 추상 경로명이 나타내는 파일의 크기 리턴

 String getPath()

 추상 경로명 전체를 문자열로 변환하여 리턴

 String getName()

 추상 경로명이 나타내는 파일 또는 디렉터리

 이름을 문자열로 리턴

 boolean isFile()

 추상 경로명이 일반 파일이면 true 리턴

 boolean isDirectory()

 추상 경로명이 디렉터리이면 true 리턴

 long lastModified()

 추상 경로명이 나타내는 파일이 마지막으로

 변경된 시간 리턴

 boolean exists()

 추상 경로명이 나타내는 파일 또는 디렉터리가

 존재하면 true 리턴

 

about author

PHRASE

Level 1  머나먼나라

댓글 ( 4)

댓글 남기기

작성