Frog is cry
Day18 본문
---------------------------
* keyword
- 파일입출력
> 바이트 기반 스트림
> 바이트기반 보조 스트림
> 문자 기반 스트림
---------------------------
[입출력]
IO란?
Input Ouput을 의미
프로그램 기준
프로그램에 데이터가 들어온다면 input
프로그램의 데이터가 나간다면 output
파일입출력?
프로그램 - 파일간의
입력과 출력
파일 ->프로그램 (입력) read
파일 <- 프로그램(출력) write
------------------------
스트림이란?
: 데이터 입력,출력 시, 데이터가 흘러가는 통로
스트림의 특징
-단방향의 흐름을 갖고 있다
- FIFO 구조를 갖고 있다.
First In First Out
- 스트림을 통해 흘러가는 기본 단위는
바이트단위, 문자단위
기계어: 0,1 이진수로 이뤄진 언어
1:전류가 흐르는가
0:전류가 흐르지않는가
010101011110
cm
mm
m
100cm = 1m
bit :데이터를 세는 최소 단위
byte: 1bit* 8 = 1byte
메모리를 세는 주 단위
---------------------------
* 스트림의 종류
- 바이트 기반
>~InputStream
>~OutputStream
- 문자 기반
>~Reader
>~Writer
---------------------------
* 파일입출력 작업순서
1) 파일스트림 객체 생성
2) 파일 작업: 입력, 출력
3) 파일 닫기
---------------------------
* 자바의 입출력 패키지
java.io에 모두 포함
[바이트 기반 스트림]
: 바이트 단위로 데이터를 입출력하는 스트림
* 바이트 기반 스트림의 특징
- 1byte 씩 읽고 출력함
- InputStream, OutputStream
클래스가 모든 바이트 기반 스트림의 부모클래스
- 데이터 읽기: read()
- 데이터 쓰기: write()
* 파일입출력에서의 바이트 기반 스트림
- FileInputStream: 파일내용을 읽기 위한 클래스
- FileOutputStream: 파일에 내용을 쓰기 위한 클래스
----------------------------
[FileInputStream]
* 사용방법
1) 파일스트림객체 생성
FileInputStream fis;
fis=new FileInputStream("파일경로//파일명.확장자");
2) 파일 작업(read)
fis.read();
:1byte씩 읽어와 정수형으로 반환
3) 파일스트림 닫기
fis.close()
<실습>FisTest.java
FileInputStream클래스 실습
*-1이 파일의 끝인가?
0xff :파일의 끝
11111111 11111111
0xffff:정수형 -1
read()
read(byte b[])
:1byte씩 읽어와 바이트 b배열에 저장
read(byte b[],int off, int len)
:1byte씩 읽어와
b[off] 위치부터 len 갯수만큼 저장
-------------------------------
[FileOutputStream]
* 사용방법
1) 파일 스트림 객체 생성
FileOutputStream fos;
fos=new FileOutputStream("파일경로//파일명.확장자");
2) 파일 작업(쓰기)
fos.write();
3)파일 스트림 닫기
fos.close();
- write(byte b[])
:byte b[] 의 내용을 파일에 적음
-write(byte b[],int index,int size)
:byte b[]의 내용을
index 위치부터 size만큼의 바이트까지
파일에 적음
<실습>FosTest.java
===================
[바이트 기반 보조스트림]
: 보조스트림은
바이트기반 스트림의 성능을 향상시키는 역할을함
* 사용방법?
바이트기반스트림 생성한 후에
그 스트림의 객체를 바이트 기반 보조스트림에 전달
*파일입출력 관련된 바이트 기반 보조스트림
BufferedInputStream
BufferedOutputStream
: 버퍼를 통한 입출력
버퍼: 임시 저장장치
* 사용이유?
한 바이트씩 입출력하는 것보다
버퍼(바이트 배열)를이용해서
한번에 여러바이트를 입출력하는 것이 더 빠르기때문
==============
[BufferedInputStream]
*메서드
- read()
:1byte씩 읽어서 버퍼에 담는다
- read(byte b[])
:1byte씩 읽어와 바이트b[]에 저장
- read(byte b[],off,len)
:1byte씩 읽어와 b[off]위치부터
len만큼 바이트 b[]에 담는다
<실습> FileBufferTest.java
FileInputStream만 사용할 때랑
BufferedInputStream까지 사용할 때
걸리는 시간을 비교
System.currentTimeMillis();
:현재 시간을 millisecond 구함
* 프로그램의 실행 시간은
입출력 처리의 가장늦은 시간을 따라가기 때문에,
바이트 스트림 사용 시,
바이트 보조스트림을 같이 사용하여
입출력 처리 성능을 향상시키는 것이 중요
----------------------
[BufferedOutputStream]
*메서드
write(int i)
: 정수형을 입력받아 해당하는 아스키코드 문자값을
파일에 쓰기
<실습> BufferedOutputStreamEx.java
*bos=new BufferedOutputStream(fos,5);
파일객체, 정수값
정수값: 버퍼의크기(byte)
flush()
:버퍼의 내용을 비워줘
버퍼객체.close()
버퍼에 들어있는 모든 내용을 내보내고
버퍼객체닫는다
=======================
[문자 기반 스트림]
- FileReader
- FileWriter
<FileReader>
* 사용방법
FileReader fr;
fr = new FileReader("파일위치경로");
* 문자기반 보조스트림
- BufferedReader
- BufferedWriter
: 버퍼를 사용하여 문자 입출력 성능 향상
*사용방법
FileReader fr= new FileReader("파일경로파일명");
BufferedReader br= new BufferedReader(fr);
* 사용할 메서드
- read( ): 문자 1개를 읽어 정수형 반환
- readLine(): 한 줄을 읽어 문자열 반환
- mark(int readAheadLimit)
: readAheadLimit byte 만큼 되돌아갈수 있다
- reset(): mark 위치로 되돌아가서 다시 읽음
- markSupported()
: mark()기능을 지원하면 true, 지원하지 않으면 false 값반환
<실습> BufferedReaderEx.java
<text.txt>
hello
world
hello world!
A
-----------------------------
[BufferedWriter]
* 사용할 메서드
- write(char cbuf[])
:cbuf 배열에 저장된 값을
한 문자씩 읽어 파일에 쓰기
- write(int i)
: 정수값 i의 아스키코드문자값을 파일에 쓰기
<실습> BufferedWriterEx.java
==============
<실습>FileCopyEx.java
문자 스트림을 활용하여
다음과 같은파일을 생성한 후 복사한
파일 생성하기
1) file1.txt
hello~
I'm file!
2) file2.txt
file1.txt 파일 읽기
file2.txt 파일 쓰기
Comments