본문 바로가기

JAVA

[이것이 자바다] 18 IO 기반 입출력 및 네트워킹

18.1 IO 패키지 소개

  • Stream : 자바에서 데이터는 스트림을 통해 입출력.
  • 단일 방향으로 연속적으로 흘러가는 것을 말함.
  • 데이터는 출발지에서 나와 도착지로 들어간다는 개념

 

18.2 입력 스트림과 출력 스트림

  • 입력 스트림 (InputStream) : 프로그램이 데이터를 입력받을 때 (키보드, 파일, 네트워크상의 프로그램)
  • 출력 스트림 (OutputStream) : 프로그램이 데이터를 내보낼 때 (모니터, 파일, 네트워크상의 프로그램)

 

java.io 패키지의 주요 클래스

  • File : 파일 시스템의 파일 정보를 얻기 위한 클래스
  • Console : 콘솔로 문자출력
  • InputStream/OutputStream : 바이트단위 입출력을 위한 최상위 입출력 스트림 클래스
  • FileInputStream/FileOutputStream
    DataInputStream/DataOutputStream
    ObjectInputSteam/ObjectOutputStream
    PrintStream BufferedInputStream/BufferedOutputStream (바이트 단위 입출력 모두 하위 입출력 스트림 클래스)
  • 뒤에 Stream만 있으면 Byte단위, Reader/Writer 있으면 Char 단위

 

ex) 그림, 멀티미디어, 텍스트 등의 파일을

바이트 단위로 읽어들일 때에는 FileInputStream,

바이트 단위로 저장할 때에는 FileOutputStream.

텍스트 파일의 경우,

문자 단위로 읽어들일 때에는 FileReader,

저장은 FileWriter.

 

18.2.1 InputStream

  • 바이트단위, 최상위 클래스, 추상 클래스
  • 모든 바이트 단위 입력 스트림은 이 클래스를 상속받는다. (FileInputStream, BufferedInputStream, DataInputStream)

 

read() 메소드

  • 입력스트림으로부터 1바이트 읽고 4바이트 int 타입으로 리턴
  • 더 이상 입력 스트림으로부터 바이트를 읽을 수 없다면 -1을 반환
InputStream is = new FileInputStream("C:/test.jpg"); // 이미지파일을 Byte단위로 읽는다
int readByte;
while (readByte = is.read()) != -1) { ..loop..}
//readyByte라는 정수형 변수에 read 메소드 실행시킨 값 -1을 대입하고, 그 값이 -1이 아니라면

 

read(byte[ ]b) 메소드

  • 입력스트림의 매개값으로 주어진 바이트 배열의 길이만큼 바이트를 읽고 배열에 저장, 읽은 바이트 수를 리턴.
  • 읽은 바이트 수가 배열의 길이보다 작아도 읽은 수 만큼만 리턴.
InputStream is = new FileInputStream("C:/test.jpg");
int readByteNo;
byte[ ] readBytes = new byte[100];
while((readByteNo = is.read(readBytes)) != -1) { ... loop ... }

// 데이터를 읽을 때 매개값으로 들어온 바이트 배열의 길이만큼
// byte 길이 100이니까 한번에 100만큼 읽을 수 있음 

 

read(byte[ ]b, int off, int len) 메소드

  • 입력스트림으로부터 len개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]부터 len개까지 저장한다.
  • 읽은 바이트 수인 len을 리턴.
  • 한 번에 읽어들이는 바이트 수를 len 매개값으로 조절, 배열에서 저장이 시작되는 인덱스를 지정할 수 있다.
InputStream is = new FileInputStream("C:/test.jpg");
byte[] readBytes = new byte[100]
int readByteNo = is.read(readBytes, 0, 100);

 

close() 메소드

  • InputStream을 더 이상 사용하지 않을 경우 close 메소드 호출
  • close 안 하면 holding → lock이 걸림 (편집 X)

 

⇒ OutputStream, write 메소드 너무 많아서 생략,,


 

18.4.2 FileInputStream

FileInputStream fis = new FileInputStream("C:/Temp/image.gif");
int readByteNo;
byte[] readBytes = new byte[100];
while ( (readByteNo = fis.read(readBytes)) != -1 ) {
//읽은 바이트 배열(readBytes)을 처리
}
fis.close();

—→ FileOutputStream, write 비슷해서 다 생략

 

 

 

 

Notion2Tistory

 

boltlessengineer.github.io

이것이 자바다 (신용권의 Java 프로그래밍 정복)

 

이것이 자바다

『이것이 자바다』은 15년 이상 자바 언어를 교육해온 자바 전문강사의 노하우를 아낌 없이 담아낸 자바 입문서이다. 자바 입문자를 배려한 친절한 설명과 배려로 1장에 풀인원 설치 방법을 제

book.naver.com