[java] IO스트림

[java] IO스트림

- 간단하게 파일을 만드는 과정

File 클래스를 가지고 작업

java.io. 패키지에 존재

프로그램 상의 데이터를 외부매체(모니터, 스피커, "파일")로 출력하거나

* 입력장치(키보드, 마우스, 마이크, "파일")로 입력받는 과정

* => IO(Input & OutPut, 입출력)

*

* 그런데! IO이 되는 원리는 무엇일까???

* IO를 진행하고 싶다면

* 우선적으로 "반드시" 프로그램과 외부매체와의 "통로"를 만들어야한다.

* => "스트림" (Stream)

*

*

* 스트림의 특징

* - 단방향 : 입력이면 입력, 출력이면 출력

* 입력용 스트림 따로, 출력용 스트림이 따로 존재

* 동시에 입출력을 하고자 한다면?

* -> 하나의 스트림으로는 불가능!!!

* -> 입력, 출력 스트림 둘다 갖고있어야함

*

* - 선입선출(FIFO) : 먼저 전달한값이 먼저 나오게됨 (먼저들어간놈이 먼저 나온다.) => 큐(Queue)

* (순서대로 들어가서 나온다.)

* 시간지연 문제가 발생할 수 있다.

*

* 스트림의 구분

* - 통로의 사이즈

*

* 바이트 스트림 : 1Byte 짜리가 이동할 수 있는 좁은 통로

* => 입력(XXXInputStream) / 출력(XXXOutputStream) *

* 문자 스트림 : 2Byte 짜리가 이동할 수 있는 넓은 통로

* => 입력(XXXWriter) / 출력 (XXXWriter)

*

* - 외부매체와의 직접적인 연결 여부

* 기반 스트림 : 외부 매체와 직접적으로 연결되는 통로

* 보조 스트림 : 기반 스트림만으로 부족한 성능을 향상시켜주는 용도의 스트림

* => 단독 사용 불가(기반스트림을 만들고 추가해주는 용도)

* => 속도향상, 자료형에 맞춰서 변환, 객체 단위로 입출력하게 도움...

<바이트 스트림>

입력, 출력

프로그램 --> 외부매체(파일)

출력 : 프로그램 내의 데이터를 파일로 내보내기(파일에 기록하겠다.)

FileOutputStream : "파일"로 데이터를 출력하되, 1byte단위로 출력하겠다.

FileInputStream : 파일로부터 데이터를 가져와서 입력하는데, 1byte 단위로 입력받겠다.

프로그램 <-- 외부매체 (파일)

입력 : 파일로부터 데이터를 가지고 오겠다.

<문자 스트림>

FileWriter

FileReader

BufferedReader / BufferedWriter

=> 버퍼공간을 제공해서 한번에 모아뒀다가 한꺼번에 입출력 진행

=> 속도 향상 목적의 보조 스트림 (BufferedXXX)

[표현법]

보조스트림클래스이름 객체이름 = new 보조스트림클래스이름(기반스트림객체);

=> 보조스트림은 단독으로 존재할 수 없기 때문에!!!

BufferedWriter : 버퍼공간을 제공해서 한꺼번에 출력을 진행하겠다.

실수로 자원반납을 까먹는다면?

누가 대신 close좀 해주면 안되나?

* try ~ with ~ resource 구문

* - JDK7 버전 이상부터 가능

*

* [표현법]

* try(스트림객체생성;){

* 예외가 발생할법한 구문

* }

* catch(예외클래스이름 e){

*

* }

*

* - 스트림객체를 try(여기!!!!!!!!)에 넣어버리면

* 스트림객체를 생성 후 해당 블록의 구문이 실행 완료되면

* 알아서 자원 반납이 된다.

*

* - 선언부분도 같이!

* - 객체 생성을 여러개 할 경우 마지막 생성부는 ; 붙여되고

* 안붙여도 된다.

from http://jjorong-e.tistory.com/64 by ccl(A) rewrite - 2021-11-18 03:02:29