FileInputStream과 FileOutputStream //실제로 많이 사용
-파일에 입출력 하기위한 스트림
생성자 | 설명 |
FileInputStream(String name) | 지정된 파일이름(name)을 가진 실제 파일과 연결된 FileInputStream을 생성한다 |
FileInputStream(File file) | 파일의 이름이 String이 아닌 File인스턴스로 지정해주어야 하는 점을 제외하고 위와 동일하다 |
FileInputStream(FileDescriptor fdObj) | 파일 디스크립터(fdObj)로 FileInputStream을 생성한다 |
FileOutputStream(String name) | 지정된 파일이름(name)을 가진 실제 파일과 연결된 FileOutputStream을 생성한다 |
FileOutputStream(String name, boolean append) |
지정된 파일이름(name)을 가진 실제 파일과 연결된 FileOutputStream을 생성한다. 두 번째 인자인 append를 true로 하면, 출력 시 기존의 파일 내용의 마지막에 덧붙인다. false면 기존의 파일내용을 덮어쓰게 된다 |
FileOutputStream(File file) | 파일의 이름이 String이 아닌 File인스턴스로 지정해주어야 하는 점을 제외하고 FileOutputStream(String name)와 동일하다 |
FileOutputStream(File file, boolean append) |
파일의 이름이 String이 아닌 File인스턴스로 지정해주어야 하는 점을 제외하고 FileOutputStream(String name, boolean append)와 동일하다 |
FileOutputStream(fileDescriptor fdObj) | 파일 디스크립터(fdObj)로 FileOutputStream을 생성한다 |
바이트기반의 보조 스트림
-FilterInputStream과 FilterOutputStream
inputStream/outpuSteam의 자손이며 모든 보조스트림의 조상이다
protected FilterInputSteream(InputStream in) public FilterOutputStream(OutputStream out) |
보조스트림은 자체적으로 입출력을 수행할 수 없기에 기반스트림을 필요로 한다
-> 상속을 통해 원하는 작업을 수행하도록 읽고 쓰는 메서드를 오버라이딩 해야 한다
FilterInputStream과 FilterOutputStream을 상속받아 기반스트림에 보조기능을 추가한
-보조스트림 클래스
FilterInputStream의 자손 BufferedInputStream, DataInputStream, PushbackInputStream 등 FilterOutputStream의 자손 BufferedOutputStream, DataOutputStream, PrintStream 등 |
BufferedInputStream과 BufferedOutputSteam
스트림의 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림이다
한 바이트씩 입출력하기보다는 버퍼(바이트계열)을 이용해서
한번에 여러 바이트를 입출력하는 것이 빠르기에 대부분의 작업에 사용된다
BufferedInputStream 생성자
생성자 | 설명 |
BufferedInputStream(InputStream in, int size) | 주어진 Inputstream인스턴스를 입력소스(input source)로 하며 지정된 크기(byte 단위)의 버퍼를 갖는 BufferedInputStream 인스턴스를 생성한다 |
BufferedInputStream(InputStream in) | 주어진 Inputstream인스턴스를 입력소스(input source)로 하며 버퍼의 크기를 지정하지 않으므로 기본적으로 8192byte 크기의 버퍼를 갖게 된다. |
버퍼크기는 입력소스로부터 한 번에 가져올 수 있는 데이터의 크기로 지정하면 좋다
->파일인 경우 보통 8192(8k)로 지정 버퍼 크기를 변경해가며 테스트하면 최적의 크기를 알 수 있다
**외부의 입력소스보다 내부의 버퍼로 읽는 것이 빠르기 때문에 효율이 좋다
버퍼에 저장된 데이터 읽기 -> read메서드 호출 -> BufferedInputStream이 입력소스로부터 다시 버퍼크기 만큼의 데이터를 읽어 버퍼에 저장 -> 반복
BufferedOutputSteam 생성자와 스트림
메서드/생성자 | 설명 |
BufferedOutputStream(InputStream in, int size) | 주어진 OutputStream 인스턴스를 출력소스(output source) 로 하며 지정된 크기의 버퍼를 갖는 BufferedOutputStream 인스턴스를 생성한다 |
BufferedOutputStream(OutputStream in) | 주어진 OutputStream 인스턴스를 출력소스로 하며 버퍼의 크기를 지정하지 않으므로 기본적으로 8192 byte크기의 버퍼를 갖게된다. |
flush() | 버퍼의 모든 내용을 출력소스에 출력한 다음 버퍼를 비운다 |
close() | flush()를 호출해서 버퍼의 모든 내용을 출력소스에 출력하고 BufferedOutputStream 인스턴스가 사용하던 모든 자원을 반환한다. |
입력과는 반대로 write메서드를 이용한 출력이 버퍼에 저장된다
버퍼가 가득차면, 버퍼의 모든 내용을 출력소스에 출력 후 버퍼를 비운다 (출력 저장준비)
->버퍼가 가득 찼을때만 출력소스에 출력을 하기 때문에 마지막 출력 부분이 출력소스에 쓰이지 못하고
버퍼에 남아있는채로 종료될 수 있다 (*주의)
->close()나 flush()를 호출하여 마지막에 버퍼에 있는 모든 내용이 출력소스에 출력되도록 해야 한다.
DataInputStream과 DataOutputStream
DataInputStream은 DataInput 인터페이스, DataOutputStream은 DataOutput 인터페이스를 각각 구현하여
8가지 기본 자료형의 단위로 읽고 쓸 수 있다
DataOutputStream의 출력 형식은 각 기본 자료형 값을 16진수로 표현하여 저장한다
**각 자료형의 크기가 다르기에 출력한 데이터를 다시 읽어올 때는 순서를 염두해 두어야 한다
SequenceInputStream //InputStream을 바로 상속
여러개의 입력스트림을 연속적으로 연결하여 하나의 스트림으로부터 데이터를 읽는 것과 같이 처리할 수 있도록 돕는다.
큰 파일을 여러 개의 작은 파일로 나눴다가 하나의 파일로 합치는 것과 같은 작업을 수행할 때 사용한다
SequenceInputStream의 생성자
메서드/생성자 | 설명 |
SequenceInputStream(Enumeration e) | Enumeration에 저장된 순서대로 입력스트림을 하나의 스트림으로 연결한다 |
SequenceInputStream(InputStream s1, InputStream s2) |
두 개의 입력스트림을 하나로 연결한다 |
Vector에 연결할 입력스트림들을 저장한 다음 Vector의 Enumeration elements()를 호출하여 생성자의 매개변수로 사용한다
PrintStream
데이터를 기반스트림에 다양한 형태로 출력할 수 있는 print, println, printf와 같은 메서드를 오버로딩하여 제공한다
데이터를 적절한 문자로 출력하는 것이기 때문에 문자기반 스트림의 역할을 수행한다
PrintWriter
위와 동일한 기능이지만 향상된 버전이다(JDK 1.1) 다양한 언어의 문자를 처리하는데 적합하다
PrintStream의 기반스트림에서 IOException이 발생시 checkError()를 통해 인지가능
printf (JDK 1.5 추가)
형식화된 출력을 지원한다 Java api문서 – Formatter클래스 참고
자주 사용되는 출력
format | 설명 | 결과( int I =65) |
%d | 10진수 (decimal integer) | 65 |
%o | 8진수(octal integer) | 101 |
%x | 16진수(hexadecimal integer) | 41 |
%c | 문자 | A |
%s | 문자열 | 65 |
%5d | 5자리 숫자 빈자리는 공백 | 65 |
%-5d | 왼쪽정렬 5자리 숫자 빈자리 공백 | 65 |
%05d | 5자리 숫자 빈자리는 0으로 채운다 | 00065 |
실수의 출력
format | 설명 | 결과(float f = 1234.56789f) |
%e | 지수형태표현(exponent) | 1.234568e+03 |
%f | 10진수decimal float) | 1234.564789 |
%3.1f | 출력될 자리수를 최소 3자리(소수점 포함) 소수점 이하 1자리(2번째 자리에서 반올림) |
1234.6 |
%8.1f | 소수점이상 최소 6자리, 소수점 이하 1자리 출력될 자리수를 최소 8자리(소수점 포함)을 확보 빈자리는 공백으로 채워진다(오른쪽 정렬) |
1234.6 |
%08.1f | 소수점이상 최소 6자리, 소수점 이하 1자리 출려될 자리수를 최소 8자리(소수점포함)를 확보 빈자리는 0으로 채워진다 |
001234.6 |
%-8.1f | 소수점이상 최소 6자리 소수점이하 1자리 출력될 자리수를 최소 8자리 확보 빈자리는 공백으로 채워진다 왼쪽 정렬 |
1234.6 |
특수문자 출력
format | 설명 |
\t | 탭 |
%n | 줄바꿈 문자 |
%% | % |
날짜와 시간의 출력에 사용될 수 있는 옵션
format | 설명 | 결과 |
%tR %H:%tM |
시분(24시간) | 21:05 21:05 |
%tT %tH:%M:%tS |
시분초(24시간) | 21:05:33 21:05:33 |
%tD %tm/%td/%ty |
월일년 | 11/16/15 11/16/15 |
%tF %tY-%tm-%td |
년월일 | 2015-11-16 2015-11-16 |