## I/O 의 의미
 I/O는 입력과 출력을 뜻한다. 입력과 출력은 무엇일까?
 프로그램을 기준으로, 컴퓨터 주변장치(키보드, 마우스 등)를 통해 데이터를 수신하는 것을 입력이라하고, 프로그램이 다른 프로그램 혹은 장치로 데이터를 송신하는 것을 출력이라고 한다.

 

## 스트림, 버퍼, 채널의 차이는? 
 자바에서 흔히 IO에는 두 분류가 있다. 바로 IO와 NIO이다. IO는 Input, Output 을 의미하고, NIO는 New Input Output을 의미한다.
 새로운 IO라.. 무슨 차이가 있는걸까? IO는 blocking인 반면에 NIO는 non-blocking이란 점에 차이가 있다.
 실생활에 비유하여 내가 공부를 하는 경우에 blocking인 경우에는 수학공부를 하는 동안에는 열심히 수학공부만 계속 하는 것이고, non-blocking인 경우 수학→영어→국어 돌아가면서 공부하는 것이다. 다만 여기서 sync, async의 개념을 더 적용하자면, sync는 영화를 틀어서 보는 것이고, async는 친구에게 카톡(일방적)을 보내는 것으로 생각하면 될 것 같다. 자 어쩃든 구분은 스트림 <> 버퍼, 채널 로 크게 분류될 수 있다.

## 바이트 스트림과 캐릭터 스트림
- 바이트 스트림: 1byte 씩 읽어서 처리 InputStream, OutputStream 을 상속받은 클래스는 모두 byte stream 이다.  
- 캐릭터 스트림: 2byte 씩 읽어서 처리, 영어가 아닌 다른 언어를 처리하기 위해 필요 Reader, Writer 를 상속받은 클래스는 모두 character stream 이다. 


## Sytem 밑의 out / in / err 은? 
out / err -> outputStream (송신)

in -> inputStream (수신)

다만 여기서 특이한 점으로는, err인데 얼핏보면 out 과 차이가 없어보이지만, 사용 용례는 에러나 사용자의 즉각적인 집중이 필요할 때 사용된다는 점이다. 

 

## 파일 읽기 

FileInputStream in = null; // for reading
FileOutputStream out = null; // for writing

try {
  in = new FileInputStream("/Users/{username}/study/PracticeJava/src/inputoutput/xanadu.txt");
  out = new FileOutputStream("outagain.txt");
  int c;
  System.err.println();

  while ((c = in.read()) != -1) {
    out.write(c);
  }
} 
finally {
  if (in != null) {
	in.close();
  }
  if (out != null) {
	out.close();
  }
}

 

'가치코딩 [Java] > 기초문법' 카테고리의 다른 글

[Java 문법] 상속  (0) 2021.03.06
[Java 문법] 인터페이스  (0) 2021.03.05
[Java 문법] 어노테이션  (0) 2021.02.06
[Java 문법] enum  (0) 2021.02.04
[Java 문법] 패키지  (1) 2021.02.03

+ Recent posts