자바/자바 입문 공부일지

자바 기초 공부 일지 53. I/O 스트림(InputStream, OutputStream) (작성중)

Tomitom 2022. 11. 8. 10:12
반응형

 

 

전에 공부하였듯 스트림이란 데이터가 이동하는 통로입니다.

 

https://blue-dot.tistory.com/102

 

자바 기초 공부 일지 50. 스트림Stream, 필터링과 맵핑

● 스트림Stream 스트림은 데이터가 흘러가는 줄기예요. 데이터가 흘러 들어가서 결과를 출력하기까지의 과정이 담긴 줄기입니다. 마치 파이프를 연결해놓고, 그 사이에 필터를 넣을 수 있는 것

blue-dot.tistory.com

 

 

그럼 스트림과 I/O (스트림은 어떤 차이가 있는지 알아볼게요. 

스트림은 일방향의 특징을 가지는 데이터의 흐름이기 때문에  input 과 output 을 위한 코드가 따로 존재합니다. 

 

○  스트림은 주로 어떤 데이터를 흘려 보내서 중간 연산 과정을 사용하여

원하는 형태로 걸러내고 연산할 것인가에 대한 것에 목적을 가진다면,

 

I/O 스트림 (InputStream, OutputStream) 은 어떻게 입력하고 출력하는지에 대한, 

즉 콘솔을 통해 데이터를 입력하고, 콘솔로의 출력을 어떻게 하는지에 대한 표준입출력을 의미합니다. 

 

○  사용 예시에 차이를 확인하자면, 파일에 저장된 문자열을 꺼내서 컬렉션 인스턴스에 저장하는 것은

I/O 스트림으로 해결해야 할 부분이라면 

 

그 컬렉션 인스턴스에 저장된 문자열 중 길이가 5 이상인 문자열만 출력하는 것은

스트림으로 해결해야 할 부분입니다. 

 

 

 

○  자바에서는 입출력 스트림을 자바 어플리케이션의 실행과 동시에 자동으로 생성해주는데, 

별도의 스트림을 생성하는 코드를 구현하지 않아도 아래의 스트림을 사용할 수 있습니다. 

 

- System.in

- System.out

- System.err  (System.out 과 같은 역할. 입출력을 콘솔 이외의 다른 대상으로 변경하는 것이 가능합니다.) 

 

출처 : https://velog.io/@bahar-j/%EC%9E%90%EB%B0%94%EC%9D%98-%EC%9E%85%EC%B6%9C%EB%A0%A5IO%EC%99%80-%EC%8A%A4%ED%8A%B8%EB%A6%BC

 

자바의 입출력(I/O)와 스트림

스트림이란 데이터가 이동하는 통로이다. 이제까지 콘솔을 통한 출력은 System.out.println()을, 입력은 Scanner 객체를 당연하게 써왔는데, 사실 이것은 내부적으로 살펴봤을 때 스트림을 이용한 것이

velog.io

 

파일 대상의 입출력 스트림을 생성할 때 과정은 다음과 같습니다. 

 

○ 입력 스트림(Input Stream) : 실행 중인 자바 프로그램으로 데이터를 읽어들이는 스트림입니다. 

 

InputStream in = new FileInputStream("date.dat"); // 입력 스트림 생성

int data = in.read(); // 데이터 읽어 들임

 

○ 출력 스트림(Output Stream) : 실행 중인 자바 프로그램으로부터 데이터를 내보내는 스트림입니다. 

OutputStream out = new FileOutputStream("date.dat"); // 출력 스트림 생성

out.write(7); // 데이터 7을 파일에 전달

 

파일 대상 입출력 스트림을 생성하는 예시에 대해서 살펴보겠습니다. 

 

//파일에 입력을 해볼게요.

class Write7ToFile {
   public static void main(String[] args) throws IOException {
      OutputStream out = new FileOutputStream("data.dat");   // 출력 스트림 생성
      out.write(7);   // 7을 저장
      out.close();   // 스트림 종료
   }
}


//파일에 출력을 해볼게요. 

class Read7FromFile {
   public static void main(String[] args) throws IOException {
      InputStream in = new FileInputStream("data.dat");   // 입력 스트림 생성
      int dat = in.read();   // 데이터 읽음
      in.close();   // 입력 스트림 종료      
      System.out.println(dat);
   }
}

 

상기의 입출력 스트림은 finally, close 기반으로 개선할 수 있습니다. 

반응형