18.1 IO 패키지 소개
- Stream : 자바에서 데이터는 스트림을 통해 입출력.
- 단일 방향으로 연속적으로 흘러가는 것을 말함.
- 데이터는 출발지에서 나와 도착지로 들어간다는 개념
18.2 입력 스트림과 출력 스트림
- 입력 스트림 (InputStream) : 프로그램이 데이터를 입력받을 때 (키보드, 파일, 네트워크상의 프로그램)
- 출력 스트림 (OutputStream) : 프로그램이 데이터를 내보낼 때 (모니터, 파일, 네트워크상의 프로그램)
java.io 패키지의 주요 클래스
- File : 파일 시스템의 파일 정보를 얻기 위한 클래스
- Console : 콘솔로 문자출력
- InputStream/OutputStream : 바이트단위 입출력을 위한 최상위 입출력 스트림 클래스
- FileInputStream/FileOutputStream
DataInputStream/DataOutputStream
ObjectInputSteam/ObjectOutputStream
PrintStream BufferedInputStream/BufferedOutputStream (바이트 단위 입출력 모두 하위 입출력 스트림 클래스)
- 뒤에 Stream만 있으면 Byte단위, Reader/Writer 있으면 Char 단위
ex) 그림, 멀티미디어, 텍스트 등의 파일을
바이트 단위로 읽어들일 때에는 FileInputStream,바이트 단위로 저장할 때에는 FileOutputStream.
텍스트 파일의 경우,
문자 단위로 읽어들일 때에는 FileReader,저장은 FileWriter.
18.2.1 InputStream
- 바이트단위, 최상위 클래스, 추상 클래스
- 모든 바이트 단위 입력 스트림은 이 클래스를 상속받는다. (FileInputStream, BufferedInputStream, DataInputStream)
read() 메소드
- 입력스트림으로부터 1바이트 읽고 4바이트 int 타입으로 리턴
- 더 이상 입력 스트림으로부터 바이트를 읽을 수 없다면 -1을 반환
InputStream is = new FileInputStream("C:/test.jpg"); // 이미지파일을 Byte단위로 읽는다
int readByte;
while (readByte = is.read()) != -1) { ..loop..}
//readyByte라는 정수형 변수에 read 메소드 실행시킨 값 -1을 대입하고, 그 값이 -1이 아니라면
read(byte[ ]b) 메소드
- 입력스트림의 매개값으로 주어진 바이트 배열의 길이만큼 바이트를 읽고 배열에 저장, 읽은 바이트 수를 리턴.
- 읽은 바이트 수가 배열의 길이보다 작아도 읽은 수 만큼만 리턴.
InputStream is = new FileInputStream("C:/test.jpg");
int readByteNo;
byte[ ] readBytes = new byte[100];
while((readByteNo = is.read(readBytes)) != -1) { ... loop ... }
// 데이터를 읽을 때 매개값으로 들어온 바이트 배열의 길이만큼
// byte 길이 100이니까 한번에 100만큼 읽을 수 있음
read(byte[ ]b, int off, int len) 메소드
- 입력스트림으로부터 len개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장한다.
- 읽은 바이트 수인 len을 리턴.
- 한 번에 읽어들이는 바이트 수를 len 매개값으로 조절, 배열에서 저장이 시작되는 인덱스를 지정할 수 있다.
InputStream is = new FileInputStream("C:/test.jpg");
byte[] readBytes = new byte[100]
int readByteNo = is.read(readBytes, 0, 100);
close() 메소드
- InputStream을 더 이상 사용하지 않을 경우 close 메소드 호출
- close 안 하면 holding → lock이 걸림 (편집 X)
⇒ OutputStream, write 메소드 너무 많아서 생략,,
18.4.2 FileInputStream
FileInputStream fis = new FileInputStream("C:/Temp/image.gif");
int readByteNo;
byte[] readBytes = new byte[100];
while ( (readByteNo = fis.read(readBytes)) != -1 ) {
//읽은 바이트 배열(readBytes)을 처리
}
fis.close();
—→ FileOutputStream, write 비슷해서 다 생략
'JAVA' 카테고리의 다른 글
[이것이 자바다] 18. 6 네트워크 기초, Java Swing으로 채팅 구현 (2) (0) | 2021.03.10 |
---|---|
[이것이 자바다] 18.4 파일 입출력, Java Swing으로 채팅 구현 (0) | 2021.03.10 |
[이것이 자바다] 15 컬렉션 프레임워크 - 기타 컬렉션 (0) | 2021.03.10 |
[이것이 자바다] 15 컬렉션 프레임워크 (0) | 2021.03.10 |
[이것이 자바다] 11 기본 API 클래스 (2) getProperty, Collection (0) | 2021.03.10 |
Uploaded by Notion2Tistory v1.1.0