<스트림 입출력>
버퍼를 가지고 순차적으로 이루어지는 입출력
<자바의 입출력 스트림>
= 응용프로그램과 입출력 장치를 연결하는 소프트웨어 모듈
입력 스트림: 입력장치로부터 자바프로그램으로 데이터 전달
출력 스트림:출력 장치로 데이터 출력
- 스트림의 양 끝에 입출력 장치와 자바 응용프로그램 연결
- 스트림은 단방향 (입출력을 동시에 하는 스트림 없음)
- 입출력 스트림 기본단위
바이트 스트림: 바이트
문자 스트림:문자 (자바에서는 문자 1개:2바이트)
- 선입선출 구조
<자바의 입출력 스트림 종류>
- 바이트 스트림: 입출력되는 데이터를 단순 바이트로 처리
ex. 바이너리 파일을 읽는 입력 스트림
- 문자 스트림: 문자만 입출력하는 스트림, 문자가 아닌 바이너리 데이터는 스트림에서 처리하지 못함
ex. 텍스트 파일을 읽는 입력 스트림
InputStreamReader rd=new InputStreamReader(System.in);//System.in 바이트 입력 스트림
int c= rd.read(); //문자 입력 스트림(rd)
<문자 스트림>
- 유니코드(2바이트) 문자를 입출력하는 스트림
- 문자로 표현하지 않는 데이터는 다루지 못함
- 이미지,동영상과 같은 바이너리 데이터는 입출력 불가
<문자 스트림을 다루는 클래스>
- Reader/Writer
- InputStreamReader/OutputStreamWriter
<문자 집합과 InputStreamReader를 이용한 텍스트 파일읽기>
FileInputStream fin=new FileInputStream("c:\\Temp\\hangul.txt");
InputStreamReader in=new InputStreamReader(fin,"MS949");//"MS949"는 한글 완성형 확장형 문자집합
while((c=in.read()!=-1){
System.out.print((char)c);
}
<FileWriter를 이용한 파일 쓰기>
FileWriter fout=new FileWriter("c:\\Temp\\test.txt");
fout.write('A');//문자 'A'출력
fout.close();
블록 단위 쓰기
char[] buf=new char[1024];
fout.write(buf,0,buf.length);//buf[]배열의 처음부터 배열크기(1024개 문자) 만큼 쓰기
<바이트 스트림 클래스>
- 바이트 단위의 바이너리 값을 읽고 쓰는 스트림
InputStream/OutputStream
- 추상 클래스
- 바이트 스트림을 다루는 모든 클래스의 슈퍼 클래스
FileInputStream/FileOuputStream
- 파일로부터 바이트 단위로 읽거나 저장하는 클래스
- 바이너리 파일의 입출력 용도
DataInputStream/DataOutputStream
- 자바의 기본 데이터 타입의 값(변수)을 바이너리 값 그대로 입출력
- 문자열도 바이너리 형태로 입출력
<버퍼 입출력 스트림과 버퍼 입출력의 특징>
버퍼 스트림
- 버퍼를 가진 스트림
- 입출력 데이터를 일시적으로 저장하는 버퍼를 이용하여 입출력 효율 개선
버퍼 입출력의 목적
- 입출력 시 운영체제 API 호출 횟수를 줄여 입출력 성능 개선
- 출력 시 여러번 출력되는 데이터를 버퍼에 모아두고 한 번에 장치로 출력
<버퍼 스트림의 종류>
바이트 버퍼 스트림
- 바이트 단위의 바이너리 데이터를 처리하는 버퍼 스트림
- BufferedInputStream 와 BufferedOuputStream
문자 버퍼 스트림
- 유니코드와 문자 데이터만 처리하는 버퍼 스트림
- BufferedReader와 BufferedWriter
<File 클래스>
- 파일의 경로명을 다루는 클래스
- java.io.File
- 파일과 디렉터리 경로명의 추상적 표현
- 파일 이름 변경, 삭제, 디렉터리 생성, 크기 등 파일 관리
- File객체는 파일 읽고쓰기 기능 없음
파일 객체 생성
File f= new FIle("c:\\windows\\system.ini");
파일의 경로명
String filename=f.getName();//"system.ini"
String path=f.getPath();//"c:\\windows\\system.ini"
String parent=f.getParent();//"c:\\windows"
파일인지 디렉터리인지 구분
if (f.isFile())
System.out.println(f.getPath()+"는 파일입니다.");
else if (f.isDirectory())
System.out.println(f.getPath()+"는 디렉터리입니다.");
'Java > 기초' 카테고리의 다른 글
[java기초] 업캐스팅과 다운캐스팅 (0) | 2021.07.07 |
---|---|
[java 기초] 예외처리 (0) | 2021.07.06 |
[java기초] 기본패키지 (0) | 2021.07.05 |
[java 기초] 제네릭과 컬렉션 (0) | 2021.07.04 |
[java기초] 제네릭 프로그래밍 (0) | 2021.07.02 |
댓글