본문 바로가기

6개월 대장정/JAVA 개념

31일차 - IO패키지(1, inputstream, outputstream)

반응형

안녕하세요. pitang입니다.

io패키지에 대해 설명하겠습니다.

사실 입력패키지에서만 자꾸 오류가 나서 아직 해결하지 못한 상태인데 그래도 개념 정리는 해보도록 하겠습니다!

 

IO패키지

프로그램에서 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어난다.

데이터는 사용자로부터 키보드를 통해 입력될 수도 있고, 파일 또는 네트워크로부터 입력될 수도 있다. 반대로 출력될 수도 있다.

 

자바에서 데이터는 스트림(Stream)을 통해 입출력되므로 스트림의 특징을 잘 이해해야 한다.

그러므로, 입력 스트림과 출력 스트림을 알아보겠습니다.

 

입력 스트림(InputStream)

프로그램이 데이터를 입력받을 때에는 입력 스트림(InputStream)이라 부른다.

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

 

경로 설정을 할 때, 맥북은 슬래쉬 두 개가 아니라 슬래쉬 / 하나로 표현된다.

이클립스의 workspace와 같은 곳에 iotest 폴더가 있어야만 Exception 없이 프로그램이 잘 작동된다.

(-> 윈도우에서는 같은 곳에 파일이 없어도 가능했던 것 같았는데,, 맥북은 자꾸 FileNotFoundException이 났다.

       약 3일 동안 이와 같은 오류로 힘들었지만 위와 같이 간단하게 해결했다.)

 

read() - 입력 스트림으로부터 1바이트를 읽고 4바이트 int 타입으로 리턴한다.

              따라서 리턴된 4바이트 중 끝의 1바이트에만 데이터가 있다.

              더 이상 입력 스트림으로부터 바이트를 읽을 수 없다면 -1을 리턴한다.

read(byte[] b) - 입력 스트림으로부터 매개값으로 주어진 바이트 배열의 길이만큼 바이트를 읽고 배열에 저장한다. 

                            그리고 읽은 바이트 수를 리턴한다.

read(byte[] b, int off, int len() - 입력 스트림으로부터 len개의바이트만큼 읽고,

                                                      매개 값으로 주어진 바이트 배열 b[off]부터 len개까지 저장한다.

close() - InputStream을 더 이상 사용하지 않을 경우에는 InputStream에서 사용했던 시스템 자원을 풀어준다.

 

ex1)

iotest/test1.txt
p01inputstream.Ex01 - console

위의 코드를 아래는 간단하게 루프를 돌린 것이다. 

p01inputstream.Ex02 - console

 

ex2)

iotest/test2.txt
p01inputstream.Ex03 - console

위의 코드를 아래는 간단하게 루프를 돌린 것이다. 

p01inputstream.Ex04
console

 

ex3)

FileReader 클래스는 텍스트 파일을 프로그램으로 읽어들일 때 사용하는 문자 기반 스트림이다.

FileReader는 Reader의 하위 클래이기 때문에 사용 방법이 Reader와 동일하다.

iotest/test4.txt
p03reader.Ex03
console

 

ex4)

p03reader.Ex04
console

 

출력 스트림(OutputStream)

프로그램이 데이터를 보낼 때에는 출력 스트림(OutputStream)이라 부른다.

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

 

write(int b) - 매개 변수로 주어진 int 값에서 끝에 있는 1바이트만 출력 스트림으로 보낸다.

write(byte[] b) - 매개 값으로 주어진 바이트 배열의 모든 바이트를 출력 스트림으로 보낸다.

write(byte[] b, int off, int len) - b[off]부터 len개의 바이트를 출력 스트림으로 보낸다.

flush() - 버퍼에 잔류하고 있는 데이터를 모두 출력시키고 버퍼를 비우는 역할을 한다.

close() - OutputStream에서 사용했던 자원을 풀어준다.

 

ex1)

p02outputstream.Ex01
iotest/outtest1.txt

 

ex2)

p02outputstream.Ex02
iotest/outtest3.txt

 

ex3)

p02outstream.Ex03
iotest/picture.png - iotest/outtest5.png

위의 코드를 아래는 간단하게 루프를 돌린 것이다. 

위의 코드는 데이터의 크기를 고려하지 않고 설정했으므로 outtest5에 이미지가 표시되지 않았지만

아래의 코드는 데이터를 읽지 못하는 -1까지 루프를 돌려서 쓰였으므로 이미지가 표시된 것을 볼 수 있다.

p02outputstream.Ex04
iotest/picture.png - iotest/outtest6.png

 

ex4)

FileWriter는 텍스트 데이터를 파일에 저장할 때 사용하는 문자 기반 스트림이다.

FileWriter는 Writer의 하위 클래스이기 때문에 사용 방법이 Writer와 동일하다.

p04writer.Ex02
iotest/outtest9.txt

 

ex5)

p04writer.Ex03
iotest/outtest9.txt
iotest/outtestA.txt

 

ex6)

p04writer.Ex04
iotest/outtestC.txt

 

Exception

지금까지는 파일을 간단하게 보기 쉽게 정리하느라 throws Exception 코드를 썼지만 

원래는 try-catch문으로 작성하여야 한다.

p01inputstream.Ex05HandleException
console

 

 

 

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

728x90
반응형