31.스트림

Jan 08, 2024
31.스트림
 
컴(cpu,had) 기준으로
in(입력 장치):마우스 키보드
out(출력 장치):모니터, 스피커
 
내컴 이랑 외부 컴퓨터는 서로 input과 output관계를 가지고 있다.
 

바이트 스트림(파일을 통신으로 가면 쏘켓이라고 부르기도 한다)

하드웨어(하드 디스크, 렘, CPU)
💡
APPLICATION에서 OS으로 코드를 전송할 때 스트림을 통해서 파일을 파일을 통해서 전달한다. 즉 컴퓨터에서 스트림은 무한대로 코드를 보내주는 통로 역할을 하는데 이것을 바이트 스트림이라고 한다. 바이트 스트림이라는 용어는 애플리케이션에 스트림에서만 바이트 스트림이라고하며, 종류에서는 reader(입력) write(출력)이 있다.
InputStreamReader:바이트를 문자로 변환하는 역할을 한다.
OutputStreamWrite:문자를 바이트로 변환하는 역할을 한다. 바이트 스트림 으로 전송할 때 1바이트씩 전송된다. 그렇기 때문에
  • abcd를 가져오더래도 파일은 a밖에 입력이 안되고 출력은 a밖에 안나온다.(소비가 공급을 못 따라가는 가는 것이다.) 그래서 무시되던 애들을 담을 역할을 할 친구가 필요 한 데 이 역할을 하는 애들을 보조 스트림이라하고 이 시스템을버퍼 라고 한다.
 
바이트 스트림 소비가 공급을 못 따라 갈 때 결과
notion image
보조 스트림 과 버퍼 사진 및 설명
notion image
💡
메모리가 낭비 되지 않기 위해 버퍼의 용량을 최적 하게 만드는데 예시는 사진 확인하기 버퍼
  • 애플리케이션 버퍼 (쓰기 버퍼 out put stream writer bufer) (바이트 버퍼)
  • OS 버퍼 (읽기 버퍼 in put stream readerbufer)
버퍼에 크기는 사용자가 설정 가능한데 메모리가 낭비 되지 않기 위해서 용량을 크게 만들지 않는다. 예시로 HELLO를 입력하면 버퍼를 4칸을 만든다 그러면 스트림에 O가 차있고(1) H가 OS 버퍼로 넘어가면 H가 빠진 하나의 남은 공간에 O가 들어간다(2) 애플리케이션이 여러 개일 경우에 OS의 버퍼는 애플리케이션에 숫자만큼 버퍼가 생긴다. 만약 애플리케이션에 버퍼가 꽉 차지 않을 경우 (1-1) 값을 소비 하지 않는데
이때 Flush(강제 소비)를 하면 강제로 흘려 보내진다.
예제
package ex15; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; public class StreamEx04 { public static void main(String[] args) { //키보드로 입력 할때 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); try { bw.write("안녕\n"); // 통신에서 \n는 줄바꿈을 하려고 하는게아니라 읽는 범위를 정하려고 사용한다. bw.write("반가워\n"); //read line은 한번에 소비할 때 역슬래쉬 까지 읽는다.역슬래쉬 뒤는 데이터를 버린다. bw. flush(); } catch (IOException e) { throw new RuntimeException(e); } } }
 
 
 
 
보조 스트림 없이 파일을 바로 뽑기 미션 보조 스트림 만들어서 버퍼를 통해 출력하기 미션
Share article
RSSPowered by inblog