on
[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