자바 데이터는 스트림을 통해 입출력 되는데 특징에 대해 알아보겠습니다.
java.io 패키지 주요 클래스 | 설명 |
File | 파일 시스템 파일 정보를 얻기 위한 클래스 |
Console | 콘솔로부터 문자를 입출력 하기 위한 클래스 |
InputStream / OutputStream | 바이트 단위 입출력 위한 최상위 입출력 스트림 클래스 |
FileInputStream / FileOutputStream DataInputStream / DataOutputStream ObjectInputStream / ObjectOutputStream PrintStream BufferedInputStream / BufferedOutputStream |
바이트 단위 입출력 위한 하위 입출력 스트림 클래스 |
Reader / Writer | 문자 단위 입출력 위한 최상위 입출력 스트림 클래스 |
FileReader / FileWriter InputStreamReader / OutputStreamWriter PrintWriter BufferedReader / BufferedWriter |
문자 단위 입출력 위한 하위 스트림 클래스 |
스트림 클래스는 바이트 기반 스트림과 문자 기반 스트림 두 가지로 구분됩니다.
바이트 기반 스트림은 그림, 멀티미디어, 문자 등 모든 종류 데이터를 받고 보낼 수 있습니다.
문자 기반 스트림은 문자만 받고 보낼 수 있습니다.
InputStream
바이트 입력 기반 스트림 최상위 클래스로
모든 바이트 기반 입력 스트림 클래스는 이 클래스를 상속 받습니다.
InputStream 클래스에는 바이트 기반 스트림에서 필요한 메서드가 정의되어 있습니다.
int | read() | 입력 스트림으로부터 1 바이트를 읽고 읽은 바이트를 리턴한다 |
int | read(byte[] b) | 입력 스트림으로부터 읽은 바이트들을 매개값으로 주어진 바이트 배열 b에 저장하고 실제로 읽은 바이트 수를 리턴한다 |
int | read(byte[] b, int off, int len) | 입력 스트림으로부터 len개의 바이트만큼 읽고 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장한다. 그리고 실제 읽은 바이트수만 len개를 리턴한다. 만약 len개를 모두 읽지 못하면 실제로 읽은 바이트 수를 리턴한다. |
void | close() | 사용한 시스템 자원을 반납하고 입력 스트림을 닫는다. |
read(byte[] b)
입력스트림으로 부터 100개의 바이트가 들어오면 read() 메서드는 100번 루핑해서 읽어야 한다. 그러나 ㄱㄷㅁㅇ(byte[] b) 메서드는 한 번 읽을 때 매개값으로 주어진 바이트 배열 길이만큼 읽기 때문에 루핑 횟수가 줄어든다.
그래서 많은 양의 바이트를 읽을 때는 read(byte[] b) 메서드를 사용하는 것이 좋다.
close()
InputStream을 더 이상 사용하지 않을 경우에 사용하며 close() 메서드를 호출해서 InputStream 에서 사용했던 시스템 자원을 해제합니다.
OutputStream
모든 바이트 기반 출력 스트림이 기본적으로 가져야할 메서드가 정의되어 있습니다.
리턴타입 | 메서드 | 설명 |
void | wirte(int b) | 출력 스트림으로 1바이트를 보낸다 |
void | write(byte[] b) | 출력 스트림으로 주어진 바이트 배열 b의 모든 바이트를 보낸다 |
void | write(byte[] b, int off, int len | 출력 스트림으로 주어진 바이트 배열 b[off]부터 len개까지 바이트를 보낸다 |
void | flush() | 버퍼에 잔류하는 모든 바이트를 출력한다 |
void | close() | 사용한 시스템 자원을 반납하고 출력 스트림을 닫는다 |
wirte(int b) 메서드
매개변수로 주어진 int 값에서 끝에 있는 1바이트만 출력 스트림으로 보낸다.
매개 변수가 Int 타입이므로 4바이트 모두를 보내는 것으로 오해할 수 있다.
byte -> (int b) -> OutputStream
write(byte[] b) 메서드
매개값으로 주어진 바이트 배열의 모든 바이트를 출력 스트림으로 보냅니다.
byte -> b[0], b[1], b[2], b[3]... -> (byte b[]) -> OutputStream .. (3), (2), (1)
flush(), close()
프로그램에서 더 이상 출력할 데이터가 없다면 flush() 메서드를 호출해 버퍼에 남아있는 모든 데이터가 출력되게 해야 합니다.
OutputStream을 더 이상 사용하지 않을 경우 close() 메서드를 호출해 OutputStream이 사용한 시스템 자원을 풀어줘야 합니다.
read() 메서드
read() 메서드가 리턴한 int 값을 char 타입으로 변환하면 읽은 문자를 얻을 수 있습니다.
read(char[] cbuf) 메서드
입력 스트림으로부터 매개값으로 주어진 문자 배열 길이만큼 문자를 읽고 배열에 저장합니다. 읽은 문자수를 리턴합니다. 실제 읽은 문자 수가 배열 길이보다 작을 경우 읽은 수만큼만 리턴합니다.
read(char[] cbuf, int off, int len) 메서드
read(char[] cbuf, int off, int len) 메서드는 입력 스트림으로부터 len개의 문자만큼 읽고 매개값으로 주어진 문자 배열 cbuf[off]부터 len개까지 저장합니다. 그리고 읽은 문자수인 len개를 리턴합니다. 실제 읽은 문자 수가 len개 보다 작을 경우 읽은 수만큼 리턴합니다.
File
파일 정보와 파일을 읽고 생성하는데 사용할 수 있습니다.
리턴타입 | 메서드 | 설명 |
boolean | canExecute() | 실행할 수 있는 파일인지 여부 |
boolean | canRead() | 읽을 수 있는 파일인지 여부 |
String | getName() | 파일 이름을 리턴 |
String | getParent() | 부모디렉토리 리턴 |
String | getPath() | 전체 디렉토리 리턴 |
String[] | list() | 디렉토리에 포함된 파일 및 서브 디렉토리 목록 전부 String 배열로 리턴 |
FileInputStream
바이트 단위로 읽기 때문에 그림, 오디오, 비디오, 텍스트, 파일 등 모든 종류의 파일을 읽을 수 있습니다.
문자열로된 파일 경로를 가지고 FileInputStream 을 생성
File file = new File("C:/Temp/image.gif");
FileInputStream fls = new FileInputStream(file)
FileOutputStream
파일이 이미 존재할 경우 데이터를 출력하면 파일을 덮어쓰게 되어 기존 내용이 사라질 수 있습니다.
기존 파일 내용 끝에 데이터를 추가할 경우 FileOutputStrweam 생성자의 두 번째 매개값을 true로 주면 됩니다.
FileOutputStream fis = new FileOutputStream("C:/Temp");
FileOutputStream fis = new FileOutputStream(file, true);
FileReader
문자 단위로 읽기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽을 수 없습니다.
TCP Socket 통신 InetAddress, ServerSocket (0) | 2024.03.06 |
---|---|
보조스트림 (InputStreamReader, ObjectInputStream writeObject) (0) | 2024.03.05 |
병렬 처리 (동시성, 병렬성), 병렬 스트림, 처리성능 요소 (0) | 2024.02.27 |
자바 Observable (publisher, subscriber) (0) | 2024.02.26 |
스트림과 병렬 처리 (0) | 2024.02.21 |
댓글 영역