관리 메뉴

어읽로꾸거

[네트워크 프로그래밍] 2. Stream - InputStream 본문

정리

[네트워크 프로그래밍] 2. Stream - InputStream

어읽로꾸거 2022. 9. 13. 15:46

InputStream

InputStream - abstract class

 

- read : 소스로부터 읽는 함수

- skip : 소스에서 포인터를 넘기는 함수

- available : 소스에서 읽을 수 있는 바이트의 수를 가져오는 함수

 

Polymorphism

readSomething(InputStream) => 어떤 인풋 스트림이든 가능

readSomething(FileInputStream) => 파일 인풋 스트림만 가능

read()

read는 0-255중 하나의 바이트를 int로서 리턴함 (자신이 읽은걸 반환함)

다 읽으면(EOF, EOS) -1 가져옴

블로킹 메소드 => 읽을때까지 기다림

abstract로 구현되어있어 서브클래스에서 구현되어야함

(1번 1개의 바이트를 읽는 것은 인접한 256 혹은 512바이트를 읽는 것과 같음)

read(byte[] input)

2개의 메소드

read(byte[] input)

read(byte[] input, int off, int len) throws IOException => input의 [off ... off + len - 1]까지

 

- read(byte[] input)

input의 길이만큼 읽으려고 하고, 끝까지 읽으려고 함

다읽으면 -1

읽은 바이트의 길이를 반환함

 

available()

얼마나 많은 바이트를 읽을 수 있는지 그 수를 반환함

skip(long n)

n 바이트만큼 스트림으로 부터 넘어감

실제 스킵한 만큼의 길이를 반환함

 

Filter Classes

- 인풋/아웃풋 스트림은 꽤 날것 클래스이다(raw classes) => 잊기 쉬운 값들

- HTTP header : 7bit ASCII

- FTP: ZIP format

- 자바는 Filter Class를 제공하여 raw stream에게 붙일 수 있도록 함, 바이트를 다른 포맷들로 바꾸기 위해서

=> 3개의 필터 클래스 : byte streams, readers and writers(여러 인코딩(utf8, ecukr)의 글자를 다룸 => 2byte stream)

File Stream

- file input stream / file output stream

파일을 읽거나 파일을 쓰는 스트림