본문 바로가기

JAVA/Exception , IO

IO(입출력)

1. 입출력(IO)이란

Input과 Output의 약자

컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고받는 것.

장치와 입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리할 공통적인 방법으로 스트림을 이용한다.

출발지 입력스트림 프로그램 출력스트림 도착지

키보드

파일

프로그렘

--------------------> 도착지           출발지 -------------------->

모니터

파일

프로그램

Input : 출발지 -> 입력스트림 -> 프로그램 (데이터가 들어옴)

Output : 프로그램 -> 출력스트림 -> 도착지 (데이터가 나감)

(방향은 단방향으로만 가능하다, 입력이 끝났다고 입력 스트림을 출력 스트림으로 쓰지 않는다)

 

2.스트림

입출력 장치에서 데이터를 읽고 쓰기 위해서 자바에서 제공한느 클래스.

모든 스트림은 단방향, 각각의 장치마다 연결 할 수  있는 스트림이 존재한다.

(하나의 스트림으로 입출력을 동시에 수행 할 수 없으므로 동시에 수행하려면 2개의 스트림 필요)

 

최상위의 InputStream/OutputStream/Reader/Writer  클래스는 전부  추상 클래스 이다

              입력        /     출력(저장)/입력    /출력(저장) 

Input/OuputStream은 byte기반의 스트림이고, Reader/Writer은 문자 기반의 스트림이다.

 

3.스트림 사용 방법

스트림에는 기반 스트림과 기반 스트림의 기능을 도와주는 보조 스트림이 존재한다.

기반스트림의 경우 혼자 사용 할 수 있지만, 보조 스트림의 경우 반드시 기반 스트림이 필요하다.

또한 Output용 스트림의 경우 new 기반스트림(파일명 , true)일경우 덮어쓰기가 가능하다.

 

 

4.InputStream/OutputStream (byteStream)

특정 데이터를 바이트 (Byte)단위로 읽고 쓸 수 있는
바이트 입출력 스트림 객체

사운드, 이미지, 동영상과 같은 바이너리 파일(2진수로 이루어진 0,1로 짜여져있는 데이터)을 입출력 할 수 있다.
기록된 정보를 정확히 볼 수 는 없다.

 

1)InputStream

ㄱ)

기반 스트림 사용시 : ~~InputStream 변수명 = new ~~InputSteam(파일명)
기반: 

File(파일)
Piped(쓰레드 관련)
ByteArray(배열관련)
StringBuffer(//defrecated -> 이유 아래 문자인 Reader가 있어서)

 

ㄴ)

보조 스트림 사용시 : ~~InputStream 변수명 = new ~~InputSteam(new 기반InputStream(파일명))

보조: 

Filter  
-LineNumber
-Data
-Buffered
-Pushback

Sequence
Object

 

ㄷ)메소드

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(~~); (.앞의 파일을 읽어와서 ~~배열에 넣음) 끝나면 -1 반환  , 배열형식은 for문써서 출력  
끝나면 -1 반환을  이용해 while조건에 변수가 -1이 아닐 경우를 넣어 출력가능  

(인트 변수 선언후 

while((변수 = 객체.read()) != -1) {

   //문자 출력시 char 형변환 필요

}

 

 

2)OutputStream

ㄱ)기반 스트림 사용시 : ~~OutputStream 변수명 = new ~~OutputSteam(파일명 [,true])

기반 : 

File 
Piped 
ByteArray 

ㄴ)보조 스트림 사용시 : ~~OutputStream 변수명 = new ~~OutputSteam(new 기반OutputStream(파일명[,true]))
보조 :

Filter 
-Data 
-Buffered 
-Print 
Object

 

ㄷ)메소드

void write(int b) : 출력스트림으로 1바이트를보냄
void write(byte[] b) : 출력스트림에매개값으로주어진바이트배열 b의 모든바이트를보냄
void

write(byte[] b, int off, int len)  :

출력스트림에매개값으로주어진바이트 배열 b[off]부터len개까지의바이트를 보냄 

void flush() : 버퍼에잔류하는모든바이트출력
void close() : 사용한시스템자원반납후출력스트림을닫음

4.Reader/Writer (charStream)

텍스트 파일로부터 문자 단위로 읽고 쓸때 사용하는 스트림 
텍스트가 아ㅣ닌 사운드, 이미지, 동영상등의 파일은 입출력이 불가능하다.

 

1)Reader

ㄱ)기반 스트림 사용시 : ~~Reader 변수명 = new ~~Reader(파일명)

기반 :

File

CharArray 
Piped 
String 


ㄴ)보조 스트림 사용시 : ~~Reader 변수명 = new ~~Reader(new 기반Reader(파일명))보조 : Buffered  
LineNumber 
InputStream 
Filter 
Pushback 

Buffered

 

ㄷ)메소드

int  read() : 입력스트림으로부터한개의문자를읽고리턴 
int  read(char[] c) :입력스트림으로부터읽은문자들을매개값으로주어 진문자배열 c에저장하고실제로읽은문자수리턴 
int  read(char[] c, int off, int len):
입력스트림으로부터 len개의문자만큼읽고매개값으 로주어진문자배열 c[off]부터len개까지저장, 실제로 읽은문자수인 len개리턴 
void close() 사용한시스템자원반납후입력스트림을닫음

4)Writer

ㄱ)기반 스트림 사용시 : ~~Writer 변수명 = new ~~Writer(파일명[,true])
기반 :

File

CharArray 
Piped 
String 

ㄴ)보조 스트림 사용시 : ~~Writer 변수명 = new ~~Writer(new 기반Writer(파일명[,true]))
보조 :

Buffered 
OutputStream
Filter 

 

ㄷ)메소드

void write(int c) :출력스트림으로매개값이주어진한문자를보냄 
void write(char[] c) :출력스트림에매개값으로주어진문자배열c의 모든문자를보냄 
void write(char[] c, int off, int len) :출력스트림에매개값으로주어진문자배열 c[off]부터len개까지의문자보냄
void write(String str) :출력스트림에매개값으로주어진문자열을보냄 
void write(String str, intoff, intlen) :출력스트림에매개값으로주어진문자열 off순번부터 len개까지문자보냄
void flush() : 버퍼에잔류하는모든문자열출력
void close() : 사용한시스템자원반납후출력스트림을닫음 

 





'JAVA > Exception , IO' 카테고리의 다른 글

보조스트림 : Byte TO Char  (0) 2019.12.19
보조스트림 : Buffered  (0) 2019.12.19
FileReader/Writer  (0) 2019.12.19
FileInput/OutputStream  (0) 2019.12.19
예외처리  (0) 2019.12.17