[Java]::Remind - Input/Output Stream

Gentlee's Self-Study Log·2023년 5월 17일
0

Java Reminder

목록 보기
13/19
post-thumbnail

Input/Output Stream - 입출력 스트림

자바에서 데이터는 스트림(Stream)을 통해 입출력이 된다.
스트림은 단일 방향으로 연속적으로 흘러가는 것을 말하는데 물이 높은 곳에서 낮은곳으로 흐르듯이 데이터는 출발지에서 나와 도착지로 흘러간다는 개념이다.

프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정되는데, 프로그램이 데이터를 입력받을 때에는 입력(InputStream)이라고 부르고, 데이터를 출력할때는 출력(OutputStream)이라고 한다.

입력스트림의 출발지는 키보드, 파일, 네트워크상의 프로그램이 될 수 있고, 출력 스트림의 도착지는 모니터, 파일, 네트워크상의 프로그램이 될수 있다.

항상 프로그램을 기준으로 데이터가 들어오면 입력스트림이고 데이터가 나가면 출력스트림이다.
프로그램이 네트워크상의 다른 프로그램과 데이터를 교환을 하기 위해서는 양쪽 모두 입력 스트림과 출력스트림이 따로 필요하다.
스트림은 단방향 통신을 한다는 특징이 있으므로 하나의 스트림으로 입출력을 동시에 할 수 없기 때문이다.

입출력 API - java.io

자바 API는 java.io 패키지에 외부 데이터를 입출력 할 수 있는 API를 제공한다.
(출처 : https://coding-factory.tistory.com/281)

  • 바이트 단위 입출력 스트림 : 그림, 멀티미디어, 문자등 모든 종류의 데이터들을 바이트 단위로 주고받을 수 있다.
  • 문자 단위 입출력 스트림 : 오로지 문자만 주고받을 수 있게 특화되어 있다.

기본 입출력 작업

파일 입출력

  • FileInputStream : 파일로부터 데이터를 입력 받기 위한 스트림
  • FileOutputStream : 파일로 데이터를 출력하기 위한 스트림
예시)

try{
	FileInputStream fi = new FileInputStream("a.txt");
    FileOutputStream fo = new FileOutputStream("b.txt");
}catch(Exception e){
	e.printStackTrace();
}

메서드

  • read() : 입력스트림에서 인자로 온 외부데이터에서 1 바이트 읽어들인다.
int c = fi.read();
  • write() : 출력스트림으로부터 1바이트 보낸다.
fo.write(c);
Example Code

public class OutputSTreamEX {
    public static void main(String[] args) {
      try {
          OutputStream output = new FileOutputStream("D:/Eclipse/Java/Output.txt");
          String str ="오늘 날씨는 아주 좋습니다.";
          byte[] by=str.getBytes();
          output.write(by);
      } catch (Exception e) {
              e.getStackTrace();
      }
    }
}

표준 입출력

  • System.in : 표준 입력 스트림(키보드)
  • System.in : 표준 출력 스트림(모니터, 콘솔)

필터 스트림 활용

입출력 작업 시, 부가적인 기능을 사용하기 위한 객체

예를 들면, FileInputStream인 경우에는 한 바이트를 가져올 수 있는데, 한 바이트가 아닌 텍스트파일의 한 줄을 가져오는 경우에 사용된다.

Example Code

try{
	FileReader fr = new FileReader("a.txt");
    BufferedReader br = new BufferedReader(fr);
}
{
	Strig line = null;
    while((line = br.readLine()) != null){
    	System.out.println(line); 
    }
}
}catch(Exception e){
	e.printStackTrace();
}

예제 코드에서 나온 것처럼 입출력 작업 시 BufferedReader를 추가하여서 readLine()이라는 메소드를 활용하면 텍스트 파일의 데이터를 한줄씩 읽을 수 있다.

profile
https://github.com/SamGentlee

0개의 댓글