자바의 입출력 관련 클래스를 사용하다 보면 가끔은 바이트 스트림으로 사용하다가

캐릭터스트림으로 사용해야하는 경우가 있습니다.두개의 스트림은 태어날 때부터 신분이

다르기 때문에 자기들끼리 함부로 변경될 수는 없지만 InputStreamReader,

OutputStreamWriter등을 통해서 InputStream에서 Reader를 구해낼 수는 있습니다.

 

import java.io.*;

import java.net.*;

 

public class InputStreamToReader {

    public static void main(String[] args) throws IOException {

        InputStream is = new FileInputStream("zzangnara.txt");

 

        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String s = "";

        while((s = br.readLine()) != null) {

            System.out.println(s);

        }

        is.close();

        br.close();

    }

}

예제 6 - 11 InputStreamToReader.java

 

InputStream 메소드에는 스트림으로부터 한줄씩 읽어 들이는 메소드가 없습니다.

만약 여러분이 스트림으로부터 한줄씩 읽어들여야 하는 경우는 BufferedReader

클래스에 정의되어 있는 readLine()이라는 메소드를 사용하고 싶으실 겁니다.

하지만 BufferedReader는 캐릭터 스트림이고 InputStream은 바이트 스트림이므로

 

InputStream is = new FileInputStream(“zzangnara.txt”);

BufferedReader br =new BufferedReader(is);

예제 6 - 12

 

예제 6 - 12처럼 할 수는 없습니다.

BufferedReader의 경우는 생성자에 캐릭터스트림을 의미하는 Reader만 인자를 가지기

때문이지요. 이런경우 InputStream Reader로 변경해 주는 클래스가 있는데

InputStreamReader 라는 클래스입니다. 생성자에 InputStream을 인자로 받으면

InputStream Wrapping하여 Reader를 만들게 됩니다.

즉 예제 6 - 12처럼은 못하지만 예제 6 - 11에서 처럼은 할 수 있다는 것이지요.

 

InputStream is = new FileInputStream("zzangnara.txt");

BufferedReader br = new BufferedReader(new InputStreamReader(is));

 

 

사용자 삽입 이미지

그림 6 - 10 [run InputStreamToReader]

 

Posted by
,