버퍼링 리더
BufferedReader는 버퍼 문자 입력 스트림입니다. 독자로부터 물려받습니다.
BufferedReader의 목적은 다른 문자 입력 스트림에 일부 버퍼링 기능을 추가하는 것입니다.
BufferReader를 만들 때는 독자를 생성자를 통해 매개 변수로 지정합니다. BufferReader는 독자의 데이터를 배치로 읽을 수 있으며 매번 그 일부가 버퍼로 읽습니다. 버퍼에서 데이터 의이 부분을 조작 한 후에는 데이터의 다음 부분을 리더의 다음 부분을 읽습니다.
버퍼링이 필요한 이유는 무엇입니까? 그 이유는 매우 간단하고 효율성 문제입니다! 버퍼의 데이터는 실제로 메모리에 저장되는 반면, 원시 데이터는 하드 디스크 또는 nandflash에 저장 될 수 있습니다. 우리는 메모리에서 데이터를 읽는 것이 하드 디스크에서 데이터를 읽는 것보다 10 배 이상 빠르다는 것을 알고 있습니다.
그렇다면 모든 데이터를 한 번에 버퍼에 읽지 않겠습니까? 첫째, 모든 데이터를 읽는 데 시간이 오래 걸릴 수 있습니다. 둘째, 메모리 가격은 매우 비싸고 용량은 하드 드라이브만큼 크지 않습니다.
예:
import java.io.bufferedReader; import java.io.BytearRayInputStream; import java.io.file; import java.io.inputStream; import java.io.filereader; import java.io.ioexception; import java.io.filexception; probuteredection; 정적 최종 int len = 5; public static void main (String [] args) {testBufferedReader (); } / ** * BufferedReader API 테스트 함수 * / private static void testBufferEdReader () {// bufferedReader 문자 스트림을 만듭니다. bufferedReader in = new bufferedReader (New Filereader (file)); // 캐릭터 스트림에서 5자를 읽습니다. (int i = 0; i <len; i ++) {// 다음 문자를 계속 읽을 수 있다면 다음 문자를 읽을 수 있다면 (in.ready ()) {// "문자 스트림의 다음 문자"int tmp = in.read (); System.out.printf ( " %d : %c/n", i, tmp); }} // "이 문자 스트림"이 마킹 함수를 지원하지 않으면 직접 종료합니다. 반품 ; } // "현재 인덱스 위치", 즉 6 번째 위치의 요소를 표시합니다 - "F"// 1024는 Marklimit in.mark (1024)에 해당합니다. // 22 자 건너칩니다. in.skip (22); // 5 문자 읽기 char [] buf = new char [len]; in.read (Buf, 0, Len); System.out.printf ( "buf =%s/n", String.valueof (buf)); // 라인 System.out.printf의 나머지 데이터를 읽습니다 ( "readline =%s/n", in.readline ()); // "입력 스트림의 색인"을 Mark ()로 표시된 위치, 즉 "F"로 재설정합니다. in.reset (); // "문자 스트림 재설정"에서 BUF로 5자를 읽습니다. 즉, "fghij"in.read (buf, 0, len)를 읽습니다. System.out.printf ( "buf =%s/n", String.valueof (buf)); 넣다(); } catch (filenotfoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }}} 프로그램에서 BufferedReader.txt의 내용은 다음과 같습니다.
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
실행 결과 :
0 : a1 : b2 : c3 : d4 : ebuf = 01234readline = 56789buf = fghij
완충 작가
버퍼링 라이터는 버퍼 문자 출력 스트림입니다. 작가에게서 물려받습니다.
BufferedWriter의 목적은 다른 문자 출력 스트림에 버퍼링 기능을 추가하는 것입니다.
버퍼링 라이터는 문자 배열을 통해 데이터를 버퍼합니다. 버퍼가 가득 차 있거나 사용자가 flush () 함수를 호출하면 버퍼의 데이터를 출력 스트림에 씁니다.
예:
import java.io.bufferedwriter; import java.io.file; import java.io.outputStream; import java.io.filewriter; import java.io.ioexception; import java.io.filenotfoundException; import java.lang.security {voxicl java.utilnner; public java.utter intater java. len = 5; // 영어 문자 "abcdefghijklmnopqrstuvwxyz"// private static final char [] arrayletters = "abcdefghijklmnopqrstuvwxyz"; 개인 정적 최종 문자 [] Arrayletters = New Char [] { 'a', 'b', 'c', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'z'}; public static void main (String [] args) {testBufferedWriter (); } / *** BufferedWriter API 테스트 함수* / private static void testBufferedWriter () {// "파일 출력 스트림"에 해당하는 버퍼드 라이터를 만듭니다. try {file file = new File ( "bufferwriter.txt"); BufferedWriter out = New BufferedWriter (New Filewriter (File)); // ArrayleTters 배열의 첫 10 자 배열을 출력 스트림에 쓰십시오 .Write (Arrayletters, 0, 10); // 출력 스트림 out.write ( '/n')에 "line break/n"을 쓰십시오. out.flush (); // readUserInput (); out.close (); } catch (filenotfoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }} / *** 읽기 사용자 입력* / private static void void readuserInput () {System.out.println ( "텍스트를 입력하십시오 :"); 스캐너 리더 = 새 스캐너 (System.In); // 입력 문자열을 기다립니다. str = reader.next (); System.out.printf ( "입력은 : %s/n", str); }}실행 결과 : "bufferwriter.txt"파일이 생성되고 파일의 내용은 "abcdefghij"입니다.