활동/독서

[Do it! 점프 투 자바] 06. 자바의 입출력 (Stream이란? / throws IOException / InputStream in = System.in; )

ByeongJun 2023. 9. 8. 18:20
반응형

* 본 게시물은 이지스퍼블리싱 [Do it! 점프 투 자바] 서평단 미션 수행 및 학습 목적으로 작성하였습니다.
 

  모든 내용, 디자인, 이미지, 편집 구성의 저작권은 이지스퍼블리싱(주)와 지은이에게 있으며

  학습 목적으로 내용을 재구성하여 작성했음을 밝힙니다. 문제시 삭제하도록 하겠습니다.


 

 

06장 자바의 입출력

이번 장에서는 이전까지 학습한 내용을 바탕으로, 콘솔과 파일의 입력과 출력을 알아보자. 먼저, 콘솔 입출력 부분에서는 표준 입력과 표준 출력 스트림을 사용하여 콘솔과 상호 작용하…

wikidocs.net

 

 

콘솔 입출력

 

쉽게 말해 데이터가 전송되는 통로를 Stream이라고 한다. 

 

Java에서 입력 스트림은 데이터를 읽어오는데 사용되며, 

주로 파일, 네트워크 연결, 키보드 입력 등에서 데이터를 읽어올 때 사용된다. 

 

import java.io.IOException;
import java.io.InputStream;

public class Sample {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;

        int a;
        a = in.read();

        System.out.println(a);
    }
}

 in  변수 이름      System.in  Java에서 제공하는 표준 입력 스트림 

 

 

 throws IOException  예외 처리 관련된 부분을 나타내는 Java 문법으로,

해당 메서드에서 발생할 수 있는 예외를 나열하는 것이다.

 

해당 메서드가 IOException라는 예외를 던질 수 있다는 것을 선언하는 것이기 때문에 

메서드를 호출하는 측에선 이 예외에 대한 처리를 해줘야 한다. 

 

이러면 예외가 발생했을 때 프로그램이 비정상적으로 종료되는 것을 방지하고

예외에 대한 적잘한 조치를 취할 수 있기 때문에 안정성을 높이는 중요한 역할을 한다.

 

 InputStream in = System.in;  키보드로부터 입력을 받아오는 InputStream 객체를 생성한다.

 

 'System.in' 은 InputStream의 객체로써, 표준 입력 스트림을 나타내며 키보드 입력을 읽어오기 위해 사용한다. 

기본적으로 바이트 스트림을 제공하므로 InputStream 변수 in에 할당하면 데이터를 바이트 단위로 읽을 준비가 된 것이다.

 

 in.read() 는 InputStream 객체를 통해 데이터를 읽어오는 메서드로 

사용자가 키보드로 입력한 문자의 아스키 코드 값을 반환한다. 

 

ex) 12를 입력하면 아스키 코드 값인 49와 50이 차례대로 출력

 

 

 

 

InputStream은 바이트(byte) 단위의 데이터를 읽어 들일 때 사용하는 내장 클래스이다.

InputStream의 read() 메서드는 1byte만 읽을 수 있다. 

 

 

 

 

a부터 시작하는 다른 문자를 입력해도 마찬가지로 97이 출력되는 것을 볼 수 있는데 

이는 3byte를 전달하더라도 1byte만 읽는다는 것을 알 수 있다.

 

 

 

사용자가 전달한 1byte, 3byte 데이터를 입력 스트림이라고 한다. 

Stream은 byte의 흐름을 추상화한 개념이며 데이터를 byte 단위로 다룬다. 

 

 

스트림은 '물의 흐름'

 

import java.io.IOException;
import java.io.InputStream;

public class Sample {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;

        byte[] a = new byte[3];
        in.read(a);

        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
    }
}

3byte를 입력했을 때 전부 읽고 싶을 경우 

 

'in' 객체를 사용해 사용자로부터 3개의 바이트를 읽어 'a' 배열에 저장해

 System.out.println(a); 에서 'a' 배열의 x 번째 요소 값을 출력하면 된다. 

반응형