English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 가이드

Java 프로세스 제어

Java 배열

Java 대상 지향(I)

Java 대상 지향(II)

Java 대상 지향(III)

Java 예외 처리

Java 리스트(List)

Java 큐(큐)

Java 맵 셋

Java Set 집합

Java 입력 출력(I/O)

Java Reader/Writer

Java 다른 주제

Java InputStreamReader 클래스

이 튜토리얼에서는 예제를 통해 Java InputStreamReader 및 메서드를 배웁니다.

java.io 패키지의 InputStreamReader 클래스는 바이트 데이터를 문자 데이터로 변환할 수 있습니다.

추상 클래스 Reader를 상속합니다.

InputStreamReader 클래스는 다른 입력 스트림과 함께 작동합니다. 이를 통해 입력 스트림과 문자 스트림 간의 브리지 역할을 합니다. 이는 InputStreamReader가 입력 스트림에서 문자로 변환된 바이트를 읽기 때문입니다.

예를 들어, 일부 문자는2바이트를 읽어야만 저장할 수 있습니다. 이러한 데이터를 읽기 위해 입력 스트림 리더를 사용할 수 있습니다. 이 리더는 바이트를 함께 읽습니다.2바이트를 읽고 해당 문자로 변환합니다.

InputStreamReader를 생성

InputStreamReader를 생성하기 위해 먼저 java.io.InputStreamReader 패키지를 가져와야 합니다. 패키지를 가져온 후에는 입력 스트림 리더를 생성할 수 있습니다.

//InputStream을 생성합니다.
FileInputStream file = new FileInputStream(String path);
//InputStreamReader를 생성
InputStreamReader inputStreamReader = new InputStreamReader(file);

위의 예제에서는 input이라는 이름의 InputStream을 생성하고 file이라는 이름의 FileInputStream을 생성했습니다.

이곳에서는 파일의 데이터가 일정한 기본 캐릭터编码으로 저장되었습니다.

그러나, 파일에서 캐릭터编码의 타입을 지정할 수도 있습니다.UTF8또는UTF16)

//캐릭터编码을 지정하여 InputStreamReader를 생성합니다.
InputStreamReader input = new InputStreamReader(file, Charset cs);

이곳에서는 Charset 클래스를 사용하여 파일의 문자编码을 지정했습니다.

InputStreamReader 메서드

InputStreamReader 클래스는 Reader 클래스에 존재하는 다른 메서드의 구현을 제공합니다.

read() 메서드

  • read() - 읽기자에서 단일 문자를 읽습니다.

  • read(char[] array) - 읽기자에서 문자를 읽고 지정된 배열에 저장합니다.

  • read(char[] array, int start, int length) - 읽기자에서 length의 문자 수를 읽고 start부터 지정된 배열에 저장합니다.

예를 들어, 우리가 "input.txt이 파일을 사용하여 다음과 같은 내용을 포함하고 있습니다.

This is a line of text inside the file.

이 파일의 InputStreamReader를 사용하여 읽기 시도해 보겠습니다.

import java.io.InputStreamReader;
import java.io.FileInputStream;
class Main {
  public static void main(String[] args) {
    //字符 배열을 생성
    char[] array = new char[100];
    try {
      //FileInputStream을 생성
      FileInputStream file = new FileInputStream("input.txt");
      //InputStreamReader를 생성
      InputStreamReader inputStreamReader = new InputStreamReader(file);
      //파일에서 문자를 읽습니다
      input.read(array);
      System.out.println("스트림 데이터:");
      System.out.println(array);
      //reader를 닫기
      input.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

출력 결과

스트림 데이터:
This is a line of text inside the file.

위의 예제에서 파일 입력 스트림을 사용하여 입력 스트림 레더를 생성했습니다. 입력 스트림 레더는 파일과input.txt링크.

 FileInputStream file = new FileInputStream("input.txt");
 InputStreamReader inputStreamReader = new InputStreamReader(file);

파일에서 문자를 읽기 위해 read() 메서드를 사용했습니다.

getEncoding() 메서드

getEncoding() 메서드는 입력 스트림에 데이터를 저장하는 인코딩 유형을 얻을 수 있습니다. 예를 들어,

import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.io.FileInputStream;
class Main {
  public static void main(String[] args) {
    try {
      //FileInputStream을 생성
      FileInputStream file = new FileInputStream("input.txt");
      //기본 인코딩으로 InputStreamReader를 생성
      InputStreamReader inputStreamReader1 new InputStreamReader(file);
      //지정된 인코딩의 InputStreamReader를 생성
      InputStreamReader inputStreamReader2 new InputStreamReader(file, Charset.forName("UTF8");
      //반환된 입력 스트림의 문자编码
      System.out.println("input1의 문자编码: " + input1.getEncoding());
      System.out.println("input2의 문자编码: " + input2.getEncoding());
      //reader를 닫기
      input1.close();
      input2.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

출력 결과

input1의 문자 encoding: Cp1252
input2의 문자 encoding: UTF8

위의 예제에서는 두 개의 입력 스트림 리더를 생성했습니다. 각각의 이름은 input1와 input2

  • input1문자 encoding을 지정하지 않았습니다. 따라서 getEncoding() 메서드는 기본 문자 encoding의 규격명을 반환합니다.

  • input2문자 encoding 지정UTF8따라서 getEncoding() 메서드는 지정된 문자编码을 반환합니다.

주의:Charset.forName() 메서드를 사용하여 문자编码 유형을 지정했습니다.

close() 메서드

입력 스트림 리더를 닫으려면 close() 메서드를 사용할 수 있습니다. 이 close() 메서드를 호출한 후에는 더 이상 리더를 통해 데이터를 읽을 수 없게 됩니다.

InputStreamReader의 다른 메서드

메서드설명
ready()스트림이 읽히기 준비되었는지 확인
mark()읽은 데이터 위치를 스트림에 마크
reset()레이아웃 다시 설정