1. BufferedReader 클래스
. 수업 도서관 :
java.lang.object
java.io.reader
java.io.bufferedReader
. 기본 개념 :
공개 클래스 BufferedReader는 Reader를 확장합니다
문자 입력 스트림에서 텍스트를 읽고 개별 문자를 버퍼링하여 문자, 배열 및 선을 효율적으로 읽을 수 있습니다. 버퍼의 크기를 지정하거나 기본 크기를 사용할 수 있습니다. 대부분의 경우 기본값은 충분히 큽니다.
일반적으로 독자가 작성한 각각의 읽기 요청은 기본 문자 또는 바이트 스트림에 대한 해당 읽기 요청을 초래합니다. 따라서 BufferedReader와 함께 Read () 작업이 비싸지 않은 모든 독자 (예 : Filereader 및 InputStreamReader)를 랩핑하는 것이 좋습니다.
BufferedReader Stream은 텍스트 라인을 읽을 수 있으며 독자 객체를 BufferedReader에 전달하여 BufferedReader 객체를 만듭니다. Filereader가 텍스트 라인을 읽는 기능을 제공하지 않기 때문입니다.
. 데모:
BufferedReader를 통해 입력 된 문을 캡처하십시오.
import java.io.*; class bufferedReaderDemo {public static void main (String [] args)은 ioException {bufferedReader bufferedReader = new bufferedReader (system.in)); System.out.print ( "공백을 포함 할 수있는 일련의 텍스트를 입력하십시오 :"); 문자열 text = bufferedReader.Readline (); System.out.println ( "텍스트를 입력하십시오 :"+text); }}주석:
IoException을 던지면 예외가 발생합니다
inputStreamReader는 바이트 흐름과 문자 흐름 사이의 브리지입니다.
2. 입력 스트리 프 리조더 클래스
inputStreamReader는 바이트 스트림을 문자 스트림으로 변환합니다. 바이트 흐름과 문자 흐름 사이의 브리지입니다. 문자 세트 인코딩이 지정되지 않은 경우 디코딩 프로세스는 GBK와 같은 플랫폼의 기본 문자 인코딩을 사용합니다.
건축 방법 :
inputStreamReader isr = new inputStreamReader (inputStream in); // 기본 인코딩 세트가있는 입력 스트림 리더 클래스를 구성합니다.
inputStreamReader isr = new inputStreamReader (inputStream in, String charSetName); // 지정된 인코딩 세트 구성
inputStreamReader 클래스.
객체의 매개 변수는 inputStream in = system.in;.에 의해 얻어진다. // 키보드의 데이터를 읽습니다.
또는 inputStream in = new FileInputStream (String Filename); // 파일의 데이터를 읽습니다. FileInputStream은 InputStream의 서브 클래스임을 알 수 있습니다.
기본 방법 : int read (); // 단일 문자를 읽습니다.
int read (char [] cbuf); // 읽기 문자를 배열에 저장합니다. 읽는 문자 수를 반환합니다.
. 데모:
import java.io.*; 클래스 inputStreamReaderDemo {public static void transreadnobuf () IoException { /*** 버퍼가 없으므로 read () 메소드 만 사용할 수 있습니다. */// 바이트 스트림 읽기 // inputStream in = system.in; // 키보드 입력을 읽습니다. inputStream in = new FileInputStream ( "d : //demo.txt"); // 파일 데이터를 읽습니다. // 흐르는 바이트를 문자 스트림으로 변환합니다. 바이트에서 문자로 효과적인 변환을 가능하게하려면 // 기본 스트림에서 미리 더 많은 바이트를 읽을 수 있습니다. inputStreamReader isr = new inputStreamReader (in); // 하나의 문장으로 종합적으로 읽습니다. // inputStreamReader isr = new inputStreamReader (// new FileInputStream ( "d : //demo.txt")); char [] cha = new char [1024]; int len = isr.read (cha); System.out.println (새 문자열 (Cha, 0, Len)); isr.close (); } public static void transreadbybuf ()는 ioexception { /*** 버퍼를 사용하여 버퍼 객체의 read () 및 readline () 메소드를 사용합니다. */// byte stream 읽기 // inputStream in = system.in; // 키보드에서 데이터를 읽습니다. inputStream in = new FileInputStream ( "d : //demo.txt"); // 파일의 데이터 읽기. // 흐르는 바이트를 문자 스트림으로 변환합니다. inputStreamReader isr = new inputStreamReader (in); // 읽기 // 문자 스트림 버퍼 작성 버퍼드 리더 bufr = new BufferedReader (ISR); // bufferedReader bufr = new bufferedReader (// new inputStreamReader ( "d : //demo.txt")) 한 문장으로 결합 할 수 있습니다. /*int ch = 0; ch = bufr.read (); System.out.println ((char) ch); */ 문자열 라인; while ((line = bufr.readline ())! = null) {system.out.println (line); } isr.close (); }}3. inputStreamReader 및 BufferedReader의 실제 사례 (코드가 아닌 세트)
import java.io.*; class utilresource {private void initializeresource () {try {// 파일을 읽고 utf-8 form bufferedreader bufread로 작성하십시오. 문자열 읽기; bufread = new bufferedReader (new inputStreamReader (resourceHelper .getResourceInputStream ( "pinyin.txt"))); while ((read = bufread.readline ())! = null) {system.out.println (read); } bufread.close (); } catch (filenotfoundException ex) {ex.printstacktrace (); } catch (ioexception ex) {ex.printstacktrace (); }}}참고 : pinyin.txt는 프로젝트의 루트 디렉토리에 배치됩니다.
import java.io.bufferedInputStream; import java.io.fileInputStream; import java.io.filenotfoundException; class resourceHelper { / ** * @param resourcename * @return * @return * / static bufferedInputStream getResourceInputStream (string) {새 BROUTEREDINPETSMAM (return) {새 BROUTEREDINPETSMAM (return) {새 BROUTEREDINPETSMAM (retud {retud {resourcename). FileInputStream (ResourceName)); } catch (filenotfoundException e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } return null; }}요약 :
inputStreamReader 클래스
바이트 흐름과 문자 흐름 사이의 브리지로, 입력 스트림 내부를 둘러싸고 있습니다. 문자는 텍스트 형식의 입력/출력을 더 높은 수준으로 한 번에 하나씩 읽고 인코딩 형식을 지정할 수 있습니다.
BufferedReader 클래스
BufferedReader는 독자 클래스에 의해 확장되어 일반적인 버퍼링 된 텍스트 판독 값을 제공하며, 텍스트 줄을 읽고 문자 입력 스트림의 텍스트를 읽고 각 문자를 버퍼링하여 캐릭터, 배열 및 라인을 효율적으로 읽을 수있는 매우 실용적인 읽기 라인을 제공합니다.
추신 : InputStream, InputStreamReader 및 Reader의 관계
입력 스트림 : 결과는 바이트 입력 스트림입니다. inputStream.read ( "Filename") 이후 결과는 바이트 스트림입니다.
독자 : 캐릭터 스트림 읽기
inputStreamReader : 바이트에서 문자까지의 브리지. inputStreamReader (inputStream.Read ( "filename"));
reader.read (inputStreamReader (inputStream in)); 바이트에서 문자로 변경하여 인쇄 및 표시 할 수 있습니다.
java.io.reader 및 java.io.inputstream 양식 Java 입력 클래스.
독자는 16 비트 문자, 즉 유니 코드 인코딩 된 문자를 읽는 데 사용됩니다. InputStream은 ASCII 문자 및 이진 데이터를 읽는 데 사용됩니다.
리더는 16 비트 유니 코드 문자 출력을 지원하고 입력 스트림은 8 비트 문자 출력을 지원합니다.
Reader와 InputStream은 각각 I/O 라이브러리에서 제공하는 2 개의 병렬 및 독립 레벨 메커니즘입니다. 1byte = 8bits inputstream 및 outputstream은 8 비트 스트림을 처리하는 데 사용되며 독자와 작가는 16 비트 스트림을 처리하는 데 사용됩니다.
Java 언어에서 바이트 유형은 8 비트이고 Char 유형은 16 비트이므로 중국어를 처리 할 때 독자와 작가를 사용해야합니다.
이 두 가지 수준의 메커니즘 아래에는 Bridge InputStreamReader와 OutputStreamWriter가 있으며, 이는 독자에 대한 입력 스트림의 적응과 작가에 대한 출력 스트림의 적응을 담당합니다.
Java에는 다른 데이터 소스에 해당하는 다양한 유형의 리더 입력 스트림이 있습니다.
Filereader는 파일에서 입력하는 데 사용됩니다. CharArrayReader는 프로그램의 문자 배열에서 입력하는 데 사용됩니다. StringReader는 프로그램의 문자열에서 입력하는 데 사용됩니다. PipedReader는 다른 스레드의 PipedWriter의 파이프 라인에 작성된 데이터를 읽는 데 사용됩니다.
FileInputStream, ByTearRayInputStream, StringBufferInputStream, PipedInputStream과 같은 다른 데이터 소스에 해당하는 입력 입력 스트림의 여러 유형이 있습니다.
또한 해당 리더 유형이없는 입력 스트림 입력 스트림이 있습니다. 소켓에는 소켓에 소켓이 사용됩니다. URLConnection은 URL 연결에 사용됩니다. 이 두 클래스는 getInputStream ()을 사용하여 데이터를 읽습니다.
이에 따라 java.io.writer와 java.io.outputstream 사이에는 유사한 차이가 있습니다.
inputStream.Read (byte [] b) 및 inputStream.Read (byte [] b, int off, int len)와 관련하여 두 방법 모두 스트림에서 여러 바이트를 읽는 데 사용됩니다. 숙련 된 프로그래머는이 두 가지 방법이 종종 읽고 싶은 바이트 수를 읽을 수 없다는 것을 알게 될 것입니다. 예를 들어, 첫 번째 방법에서 프로그래머는 종종 프로그램이 B.length 바이트를 읽을 수 있기를 희망하지만 실제 상황은 시스템이 종종 많은 것을 읽을 수 없다는 것입니다. Java API 지침을주의 깊게 읽은 후에는이 방법이 많은 바이트를 읽을 수 있음을 보장하지 않으며, 많은 바이트 (최소 1)까지 읽을 수 있음을 보장 할 수 있습니다. 따라서 프로그램이 바이트 카운트를 읽으려면 다음 코드를 사용하는 것이 가장 좋습니다.
바이트 [] b = 새로운 바이트 [count]; int readcount = 0; // 성공적으로 읽은 바이트 수 (readCount <count) {readCount += in.Read (bytes, readCount, count -readCount); } 이 코드는 데이터 스트림의 중간 또는 끝에서 IO 예외가 발생하지 않는 한 카운트 바이트를 읽을 수 있습니다 (Eofexception).