본문 바로가기
Dev/Java

07.IO(1) - file, 바이트기반스트림

by YoonYeoJin 2023. 7. 30.

자바 수업을 들으면서

여태까지는 다양한 클래스에서 제공하는 메소드들을 많이 배웠는데

이 부분에서부터 컴퓨터에 관련한 내용들을 많이 배웠던것 같다.

 

첫번째로는 오늘 정리해볼 입출력(IO) - 파일을 만들고 스트림 등 다양한 기능들을 이용해서 첨부파일 등에 필요한 기능

두번째는 - 네트워크 - 소켓 등 다양한 기능을 통해서 옆사람과 간단한 채팅을 할 수 있는 기능을 배웠던 것으로 기억한다.

 

무튼 오늘은 파일과 스트림을 만들고 여기에 기록을 하는 방법에 대해서 알아보려고 한다

 

1. 스트림(stream)?

스트림은 우리가 설계한 프로그램에서 데이터를 외부로 출력하거나 입력을 받게 하는 통로 역할을 한다.

스트림은 다음과 같은 특징이 있는데 - 한 방향으로 흐름이 있다.   즉, 입력을 원하면 입력스트림, 출력을 원하면 출력스트림을 만들어줘야 한다. - FIFO: 선입선출의 개념으로 먼저 들어간 데이터가 먼저 나오게 된다.

 

1-1. 스트림의 구분

1) 스트림의 사이즈(바이트 스트림 / 문자 스트림)

 바이트 스트림1byte짜리만 왔다갔다하는 정도의 작은 사이즈의 스트림으로 InputStream / OutputStream으로 구분할 수 있다.

 문자 스트림2byte짜리도 왔다갔다하는 사이즈의 넓은 스트림으로 Reader / Writer 로 구분할 수 있다.

 

2) 외부매체 직접 연결 유무

기반 스트림은 외부매체와 직접 연결이 되는 통로로 필수적으로 있어야한다.

보조 스트림은 보조의 역할을 하며 속도를 빠르게 하거나 그 외에 다른 기능을 제공하며 보조 스트림만은 단독으로 사용이 불가능한 특징이 있다.

 

2. 파일 만들기

자바를 이용해서 파일을 만들 수 있는 데 간단하게 .txt 파일을 만들어보는 코드를 알아보자

test.txt 파일을 만드는 코드

그림과 같이 f1이라는 File 객체를 만든 후 test.txt라는 파일을 만드는 코드이다.

여기서 new File() 안에 경로를 따로 지정하지 않은 상태에서 저렇게 코드를 작성하면 현재 프로젝트 내에 파일이 생성된다.

경로를 지정하는 방법은 간단하다 

그림과 같이 코드를 작성하게 되면

그림과 같이 FileTest라는 폴더가 생성된 것을 확인할 수 있다.

그리고 이렇게 만들어진 폴더에 파일을 생성하는 코드는 처음 방법에 경로만 추가해주면 된다.

f3라는 객체를 생성해서 FileTest라는 경로를 지정해준 후 test.txt라는 파일을 만드는 메소드를 실행시켰다.

그러면 다음과 같이 파일이 생성된다.

 

3. 바이트 기반 스트림으로 데이터 입출력 해보기

 1 ) 데이터 출력하기 

바이트 기반 스트림을 사용해서 데이터를 출력하는 방법은 다음과 같다.

 1. 스트림 생성 (통로 만들기)
 2. 스트림으로 데이터 출력 (메소드 활용)
 3. 다 사용한 후 스트림 반납 (필수)

 

 1. 스트림 생성 (통로 만들기)

여기서 byteStream이라는 파일이 없으면 해당 파일을 생성해주고 통로를 연결해주며, 파일이 존재할 경우 바로 통로를 연결하게 된다.

 

 2. 스트림으로 데이터 출력 (메소드 활용), 3. 스트림 반

그림과 같이 write 메소드를 사용해서 파일에 출력할 데이터를 입력한다.

그리고 finally 구문에 스트림을 반납하는 과정을 거치고 코드를 실행해보면

그림과 같이 ab는 정상적으로 출력이 되지만 '가'는 출력이 되지 않고 공백으로 나오는 것을 확인할 수 있다.

왜나하면 바이트 기반 스트림은 1byte지만 한글은 2byte이기 때문에 정상적으로 출력이 되지 않는 것이다.

 

2 ) 데이터 입력받기(read 메소드 사용)

데이터를 입력받는 과정도 출력하는 과정과 동일하다.

 과정을 거쳐 출력된 화면인데 read()메소드는 반환형이 int 형이기 때문에 아스키코드표에 있는 97 98이 출력되는 것을 확인할 수 있다. 출력과 마찬가지로 바이트 스트림은 1byte이기 때문에 '가'는 0으로 출력되는 것을 확인할 수 있다.

그렇다면 3개를 출력했지만 4개를 입력받도록 하면 어떻게 될까?

문자가 더 이상 입력받을 게 없을 경우 -1을 반환하는 것을 확인할 수 있다.

이러한 메소드를 계속해서 입력하는 것이 아닌 반복문을 사용해서 나타낼 수 있다.

그림과 같이 출력을 하게 되면 97 98 0이 출력되게 된다.

 

 

'Dev > Java' 카테고리의 다른 글

09-1.Collection(ArrayList)  (0) 2023.08.02
08.IO(2) - 문자 기반 스트림, 버퍼(보조스트림)  (0) 2023.07.31
06.StringTokenizer  (1) 2023.07.27
05-2. 다양한 함수(String 관련)  (0) 2023.07.25
05-1. 다양한 함수(Math.random)  (1) 2023.07.25