새소식

인기 검색어

개발일기

Java 스트림과 표준 스트림

  • -

한 일

배운 것

표준 스트림

자바의 Stream은 다음과 같은 특징들이 있다

  • 데이터 소스로부터 읽기만 할뿐 소스를 변경하지 않는다
  • Iterator처럼 일회용이다. 한 번 사용하면 닫혀서 다시 사용할 수 없다
  • 작업을 내부 반복으로 처리한다
  • 지연 연산 : 최종 연산이 수행되기 전까지 중간 연산이 수행되지 않는다이것 때문에 한참 헤맨 일이 있었는데 그때 헤맨 이유는 한 번 사용하면 다시 사용할 수 없다는 Stream의 특징을 몰라 복사하려고 애썼던 기억이 있다.

생각해 보면, linux에서도 표준 스트림이라는 게 존재하는데, 똑같이 한 번만 사용할 수 있는 특징을 가진다. 아 이게 여러 곳에서 통용되는 개념이구나 싶어 여러가지 공부해 보았다.

 

이 중에서 Iterator의 일회용인 특징이 흥미로웠다. Node에서도 Stream이란 게 있는데, 주로 파일 같은 것들을 다룰때 쓰인다.(타입이 제멋대로 왔다갔다 해서 다루기 매우 힘들었던 기억)

 

데이터 스트림 (한국정보통신기술협회)

위 정위를 보면 알겠지만 스트림이라는 것은 사실 네트워크를 넘어 IO 개념이라고 볼 수 있다.

 

스트림이란 데이터를 운반하는데 사용되는 연결통로이다. 단방향으로 흐르기 때문에 입력스트림과 출력 스트림이 필요하다.

 

스트림은 먼저 보낸 데이터를 먼저 받으며 중간에 건너뜀 없이 연속적으로 데이터를 주고받는다.

 

 

우리가 영상을 실시간으로 받아 볼때 스트리밍한다고 한다. 스트리밍의 특징은 데이터를 "중간에 끊김 없이 연속적으로 일방향으로" 전송한다. 우리가 네트워크 상에서 받는 데이터 또한 스트림이라고 표현한다.

 

표준 스트림
JAVA 인터페이스 뿐만 아니라, OS에서 프로그램과 그 환경(단말기) 사이에 미리 연결된 IO 통로를 말한다.
일반적으로 UNIX의 프로그램은 실행 시 3개의 스트림이 자동으로 열리며 이를 표준 스트림이라고 부르며 사용자의 터미널에 부착된다.

  • 입력 스트림(Standard input, STDIN, 0)
  • 출력 스트림(Standard output, STDOUT, 1)
  • 오류 메시지 스트림(Standard Error, STDERR, 2)

C에서 많이 보이던 익숙한 단축어들이다. unistd.h에 의해 파일 디스크립터 0, 1, 2로 표현되기도 한다.

출처 : https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%EC%8A%A4%ED%8A%B8%EB%A6%BC

 보통 입출력은 키보드와 모니터를 통해 일어나는데, 표준 스트림은 이것을 추상화한 것이다. OS 마다 처리 방식이 입출력 장치들과 달랐기 때문에 장치를 추상화 해서 이 문제를 처리하기 위해 등장했다. 따라서 이제 프로그램 입장에서 어떤 장치와 연결되는지 알 필요가 없어졌다.

데이터 스트림을 통해 순차적인 데이터 바이트들을 파일의 끝(EOF)까지 읽는다.

 

 유닉스에서는 입출력장치를 자동으로 입출력 받게 만들어서 프로그램이 입출력을 사용해야 할때 장치 연결을 위해 어떤 추가 작업도 필요하지 않게 만들었다. 따라서 복잡한 작업 제어가 필요 없어졌다.

출처 : https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%EC%8A%A4%ED%8A%B8%EB%A6%BC

응용 프로그램
 표준 스트림이 입력 장치와 출력 장치에서 사용될 때는 Latin-1이나 UTF-8로 미리 인코딩된 문자열이 오간다. 보통 텍스트를 포함하는 대화식 사용에서 주로 사용되나, 가끔은 이진 데이터를 전송하는 데에도 쓰일 수 있다.

 

파이프(|)를 사용해서 표준 입출력 방향을 프로세스로 바꿀 수 있다. 즉, 다른 프로세스의 표준 입력과 현재 표준 출력을 연결해줄 수도 있다.

  • ps -ef | grep java

리다이렉션(> , >>)을 사용해서 키보드가 아닌 파일로부터 입력을 받을 수 있고, 출력 또한 디스플레이가 아닌 파일로 할 수 있다

    • ls > result.txt
  •  > : 기존의 존재하는 내용을 지우고 덮어쓴다
  • >> : 기존의 존재하는 파일 맨 뒤에 내용을 추가한다

 

참조

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.