[자바] I/O(입출력) Stream이란?

2021. 6. 5. 15:41·Java
반응형

개요

이 포스팅은 자바에서 모든 입출력을 직접 다루지 않고, 스트림(Stream)이라는 구조를 통해 데이터가 제어되는데 구조와 방향성을 설명하고 어떻게 사용하는지 명시한다.

 

1. I/O Stream

2. I/O Stream 종류

3. I/O Stream 구조


1. I/O Stream

단방향 통신을 지원하는 기능

서로 통신을 위한 Input Stream / Ouput Stream 2개의 Stream이 필요

일반적으로 2개의 Stream을 I/O Stream이라고 통칭

출발지에서 도착지로 데이터를 운반하는 연결 통로

 

I/O란?

내부 또는 외부 장치와 프로그램 간의 데이터를 전송가능케 하는 지점

Input / Output의 약자로 입출력이라 부름

예) 키보드, 모니터, 파일, 네트워크

 


 

Stream이란?

운영체제에 의해 생성되는 가상의 연결고리

물이 한 방향으로 연속적인 흐름을 가지는 형태

이를 데이터의 흐름과 같다는 의미에서 사용

데이터의 이상화된 흐름

데이터를 운반하는 연결통로

 


 

Stream의 흐름

큐(Queue)와 같은 선입선출(FIFO: First In First Out) 형태로 데이터가 전송

먼저 입력된 데이터가 먼저 출력되는 형태를 말한다.

 


 

I/O Stream의 구조

 

Source

↓
Input Stream

↓

데이터 조작

↓

Output Stream

↓

Destination

 

Source : 데이터 근원지

Input Stream : 자바 입력 통로

데이터 조작 : 사용자가 직접 핸들링하여 데이터를 조작하는 구간

Output Stream : 자바 출력 통로

Destination : 데이터 종착점

 

 


 

2. I/O Stream 종류

원래 하나만 존재했으나 다국어 지원을 통해 하나가 추가되어 2가지가 됨

영어는 한 문자당 1 Byte를 사용하고 다국어는 2 Byte를 사용

즉, 바이트 입출력 스트림, 문자 입출력 스트림의 2가지 종류를 가진다.

 

 

바이트 입출력 스트림 

1 byte 단위

영상, 음성, 영문자의 binary 데이터를 처리

 


 

문자 입출력 스트림 

2 Byte 단위

다국어만 사용가능(문자)

binary 데이터 처리 불가 

 

 

 


 

3. I/O Stream 구조

자바에서는 java.io 패키지를 통해 InputStream과 OutputStream 클래스를 별도로 제공함

즉, 자바에서의 스트림 생성이란? 스트림 클래스 타입의 인스턴스를 생성한다는 의미

 

바이트 입출력 스트림

바이트 기반 스트림: 데이터가 이동하는 통로를 직접 만드는 클래스

보조 스트림: 이미 만들어져 있는 통로에 새로운 기능을 추가하는 클래스

입력 스트림 출력 스트림 입출력 대상
(설명)
바이트 기반 스트림
FileInputStream FileOutputStream 파일
ByteArrayInputStream ByteArrayOutputStream 메모리
PipedInputStream PipedOutputStream 프로세스
AudioInputStream AudioOutputStream 오디오 장치
보조 스트림
FilterInputStream FilterOutputStream 필터를 이용한 입출력
BufferedInputStream BufferedOutputStream 버퍼를이용한 입출력
DataInputStream DataOutputStream 입출력 스트림으로부터 자바의 기본 타입으로 데이터를 읽음
ObjectInputStream ObjectOutputStream 데이터를 객체 단위로 읽거나, 역직렬화
SequenceInputStream X 두 개의 입력 스트림을 논리적으로 연결
PushbackInputStream X 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능 추가
X PrintStream 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능

 

문자 입출력 스트림

문자 기반 스트림: 다국어 특성상 2 Byte를 사용하여 클래스 변경됨 

InputStream -> Reader

OutputStream -> Writer

보조 스트림: 이미 만들어져 있는 통로에 새로운 기능을 추가하는 클래스

입력 스트림 출력 스트림 입출력 대상
(설명)
문자 기반 스트림
FileReader FileWriter 파일
CharArrayReader CharArrayWriter 메모리
PipedReader PipedWriter 프로세스
StringReader StringWriter 문자열
보조 스트림
FilterReader FilterWriter 필터를 이용한 입출력
BufferedReader BufferedWriter 버퍼를 이용한 입출력
PushbackReader X 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가
X PrintWriter 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능

 

반응형
저작자표시 비영리 (새창열림)

'Java' 카테고리의 다른 글

[자바] 배포 설명자 web.xml 및 태그  (0) 2021.07.24
[자바] 로그(log)란?  (2) 2021.06.09
[자바] 문자열 클래스 - String / StringBuffer / StringBuilder의 차이점  (0) 2021.05.22
[자바] 전달인자(Argument)와 매개변수(Parameter)의 차이점  (0) 2020.04.01
[자바] 데이터 타입 ( 변수 선언시 고려할 사항)  (1) 2020.03.22
'Java' 카테고리의 다른 글
  • [자바] 배포 설명자 web.xml 및 태그
  • [자바] 로그(log)란?
  • [자바] 문자열 클래스 - String / StringBuffer / StringBuilder의 차이점
  • [자바] 전달인자(Argument)와 매개변수(Parameter)의 차이점
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (105) N
      • IT 지식 (4)
      • SW 방법론 (2)
      • Java (26)
        • 자료구조 (6)
        • 디자인 패턴 (1)
        • 코딩테스트 (3)
        • 성능최적화 (1)
        • 알고리즘 (2) N
      • 학습 (1)
        • 스프링부트 (1)
      • SQL (4)
      • 리눅스 (40)
        • 문제해결 (1)
        • 명령어 (15)
        • Vim (3)
      • 네트워크 (1)
      • Docker (2)
      • 형상관리 (3)
        • Git (1)
        • SVN (1)
      • 자격증 (2)
        • 리눅스마스터1급 (1)
        • ADsP (1)
      • 웹(WEB) (5)
        • 톰캣(WAS) (1)
      • PC (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      cifs
      chmod
      Chage
      원격
      ADsP
      DTO
      불변
      passwd
      mvc
      2차
      자바
      REST API
      whatis
      man
      스프링부트
      which
      apropos
      usermod
      docker
      su
      /etc/passwd
      비트연산
      java
      whereis
      record
      1급
      리눅스
      문제해결
      암호설정
      분석기법
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    크크크크
    [자바] I/O(입출력) Stream이란?
    상단으로

    티스토리툴바