파파비의 블로그

스트림의 개념과 file IO stream 본문

개발/java

스트림의 개념과 file IO stream

N. Dave 2020. 4. 7. 09:32
반응형

우리는 프로그램 내부에서 데이터를 사용할 때,

변수를 만들어서 저장하거나 클래스를 만드는 등의 방법을 사용한다.

 

그러나 프로그램 외부의 데이터를 사용할 때는 어떻게 할까?

가장 기본적인 방법으로 자바에선 stream이라는 도구를 사용한다.

 

stream에는 기본스트림이라는 것이 있다.

inputstream, outputstream을 직접 상속 받은 것으로

입출력 기능을 갖고 있는 클래스들을 의미한다.

 

그외 필터스크린을 상속받은 것들은

inputstream, outputstream을 객체로 받아서 사용할 수 있다.

 

기본스트림은 데이터를 주고 받을 때 바이트 형태로해서 주고받을 수 있다.

 

 

 

FileOutputStream

- 프로그램에서 파일로 데이터를 전송할 때 사용하는 스트림이다.

- 데이터를 보내고자 하는 파일이 없으면? 만들어진다

 

- 생성자는 2가지 타입이 있다. 

- 생성자(파일) : 파일에는 path가 들어가는데 해당 path의 파일이 없으면 만들어지고,

- 생정자(파일, bool) : bool 값을 true로 설정하면 본래 있던 내용에 추가가 되는 형식이다.

- 트루가 아니거나 bool을 사용하지 않았다면, 원래 있던 내용은 사라지고 덮어쓰게 된다.

 

- write, close, flush 등의 메소드가 있으며

- write의 경우 바이트 형태의 데이터를 파일로 쓴다.

 

 

 

FileInputStream

 - 파일의 데이터를 수신할 때 사용되는 스트림이다.

 - 데이터를 읽어볼 파일이 없으면 예외가 발생한다.

 - available : 한번에 읽어들일 수 있는 데이터의 양을 말한다. 파일의 크기 자체가 이 한 번의 양보다 작을 경우 파일의 크기가 반환된다.

 

 

이제 코드로 한번 살펴보자

 

먼저 파일스트림은 기본적으로 

import java.io.*; 를 해두는게 편할 것이다.

 

코딩하는 방법의 순서는 다음과 같다.

 

<outputstream의 경우>

1. try / catch문을 활용한다. (예외가 발생하기 때문)

2. path가 담긴 String을 만든다. (이때 path에 \가 들어가는데, \는 escape 기능이 있어서 \\로 써야 한다.)

3. outputstream 객체를 만들며 인자로 path를 넣는다.

 

--- 여기 까지 stream을 추출한 것이다. 이제 데이터를 보내보자

 

4. 보낼 데이터가 byte형태로 필요하다. byte[] 를 만들고 원하는 데이터를 넣는다.

5. outputstream 객체.write(data) 를 통해 보낸다.

6. data를 보낼 때 일정양을 채워서 보내는데, 그게 마지막에는 딱 떨어지지 않을 수 있다. 

   즉 잔여 data가 있을 수 있다는 얘긴데 그것 마저 보내줘야 한다. 우리는 이떄 flush를 사용한다.

   : outputstream 객체.flush();

7. 마지막으로 스트림을 닫아준다.

   : outputstream 객체.close();

 

<inputstream의 경우>

1. 1. try / catch문을 활용한다. (예외가 발생하기 때문)

2. path가 담긴 String을 만든다. (이때 path에 \가 들어가는데, \는 escape 기능이 있어서 \\로 써야 한다.)

3. inputstream 객체를 만들며 인자로 path를 넣는다. 

  : path에 파일이 존재하지 않으면, 예외가 발생한다.

 

--- 여기 까지 stream을 추출한 것이다. 이제 데이터를 받아보자

 

4. 데이터는 byte형태로 날라온다. 따라서 byte[]를 만들어보자 그런데, byte[]의 크기는 어떻게 해야할까?

   : inputstream 객체.available(); 를하면 보내지는 데이터의 양을 구할 수 있다!

5. 다 받았으면 close() 해준다.

 

 

 

반응형

'개발 > java' 카테고리의 다른 글

Comparable vs Comparator in Java // Sort 로직 구현하기  (0) 2020.09.23
필터스트림  (0) 2020.04.07
자바의 try-catch, throws, throw /예외처리  (0) 2020.04.05
Thread 쓰레드  (0) 2020.04.05
인터페이스  (0) 2020.04.05
Comments