BufferedInputStream
BufferedInputStream은 버퍼 입력 스트림입니다. FilterInputStream에서 상속됩니다.
BufferedInputStream의 목적은 "버퍼링 기능"을 제공하고 "Mark () marks"및 "reset () 재설정 메소드"를 지원하는 것과 같은 다른 입력 스트림에 일부 기능을 추가하는 것입니다.
BufferedInputStream은 본질적으로 내부 버퍼 배열을 통해 구현됩니다. 예를 들어, 특정 입력 스트림에 해당하는 BufferedInputStream을 작성한 후, read ()을 통해 입력 스트림의 데이터를 읽을 때 BufferedInputStream은 입력 스트림의 데이터를 배치로 버퍼로 채 웁니다. 버퍼의 데이터를 읽을 때마다 입력 스트림이 데이터 버퍼를 다시 채 웁니다. 입력 스트림 데이터 위치를 읽을 때까지 반복됩니다.
BufferedInputStream 함수 목록 :
BufferedInputStream (InputStream in) BufferedInputStream (InputStream in, int size) synchronized int avide () void close () synchronized void mark (int readlimit) boolean marksupported () synchronized read () synchronized int read () synchronized void (int -int the void reset) Bytecount)
샘플 코드 :
BufferedInputStream에서 API의 자세한 사용은 예제 코드 (bufferedInputStreamTest.java)를 참조하십시오.
import java.io.bufferedInputStream; import java.io.bytearrayinputStream; import java.io.file; import java.io.inputStream; import java.io.fileInputStream; import java.io.io.ioexception; import java.lang.lang.securityExcement; bufferedInputStream 테스트 프로그램 * * @Author Skywang */public class bufferedInputStreamTest {private static final int len = 5; public static void main (String [] args) {testBufferedInputStream (); } / *** bufferedInputStream* / private static void testBufferedInputStream ()의 API 테스트 기능 {// bufferedInputStream byte stream을 만듭니다. 콘텐츠는 배열 배열입니다 {file file = new File ( "bufferedInputStream.txt"); inputStream in = new bufferedInputStream (new FileInputStream (파일), 512); // 바이트 스트림에서 5 바이트를 읽습니다. "abcde", a는 0x61에 해당하고, b는 0x62에 해당하고, ... for (int i = 0; i <len; i ++) {// 다음 바이트를 계속 읽을 수 있다면 다음 바이트를 계속 읽을 수 있다면 다음 바이트를 읽을 수 있다면 (in.available ()> = 0) {// "int tmp = in. System.out.printf ( "%d : 0x%s/n", i, integer.tohexstring (tmp)); }} // "이 바이트 스트림"이 마킹 함수를 지원하지 않는 경우 (! in.marksupported ()) {System.out.println ( "지원되지 않음!"); 반품 ; } // "현재 인덱스 위치", 즉 6 번째 위치의 요소를 표시합니다 - "F"// 1024는 Marklimit in.mark (1024)에 해당합니다. // 22 바이트를 건너 뜁니다. in.skip (22); // 읽기 5 바이트 바이트 [] buf = new Byte [len]; in.read (Buf, 0, Len); // buf를 문자열로 변환합니다. 문자열 str1 = 새 문자열 (buf); System.out.printf ( "str1 =%s/n", str1); // "입력 스트림의 색인"을 Mark ()로 표시된 위치, 즉 "F"로 재설정합니다. in.reset (); // "Reset Byte Stream"에서 BUF에 5 바이트를 읽습니다. 즉, "fghij"in.read (buf, 0, len)를 읽습니다. // buf를 문자열로 변환합니다. 문자열 str2 = 새 문자열 (buf); System.out.printf ( "str2 =%s/n", str2); 넣다(); } catch (filenotfoundException e) {e.printstacktrace (); } catch (SecurityException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }}} 프로그램에서 BufferedInputStream.txt의 내용은 다음과 같습니다.
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
실행 결과 :
0 : 0x611 : 0x622 : 0x633 : 0x644 : 0x65str1 = 01234str2 = fghij
BufferedOutputStream
BufferedOutputStream은 버퍼링 된 출력 스트림입니다. FilterOutputStream에서 상속됩니다.
BufferedOutputStream의 기능은 다른 출력 스트림에 "버퍼링"을 제공하는 것입니다.
BufferedOutputStream 함수 목록 :
BufferedOutputStream (OutputStream Out) BufferedOutputStream (OutputStream Out, Int Size) 동기화 된 void Close () 동기화 된 void void void void write (byte [] 버퍼, int 오프셋, int length) 동기화 된 void write (int onebodte)
샘플 코드 :
BufferedOutputStream에서 API의 자세한 사용은 예제 코드 (bufferedOutputStreamTest.java)를 참조하십시오.
import java.io.bufferedoutputStream; import java.io.file; import java.io.outputStream; import java.io.fileoutputStream; import java.io.ioexception; import java.io.filenotfoundException; import java.lang.security exception; java.uthered excute; 프로그램 * * @Author Skywang */public class bufferedOutputStreamTest {private static final int len = 5; // 영어 문자 "ABCDDEFGHIJKLMMNOPQRSSTTUVWXYZ"개인 정적 최종 바이트 [] ARRAYLETTERS = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6B, 0x6C, 0x6C, 0x6C 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (String [] args) {testBufferedOutputStream (); } / *** BufferedOutputStream* / private static void testBufferedOutputStream ()의 API 테스트 기능 {// "파일 출력 스트림"에 해당하는 BufferedOutputStream을 만듭니다. {file file = 새 파일 ( "out.txt"); outputStream out = new bufferedOutputStream (new FileOutputStream (파일), 16); // ArrayleTters 배열의 첫 10 바이트를 출력 스트림 out.write (Arrayletters, 0, 10)에 씁니다. // "Newline/n"을 출력 스트림 out.write ( '/n')에 씁니다. // TODO! // 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); }} 실행 결과 :
"out.txt"파일을 생성하고 파일의 내용은 "abcdefghij"입니다.
단계별 테스트 : 다음 세 단계를 따라 프로그램을 테스트하여 버퍼 크기와 Flush ()의 역할을보십시오.
타입 1 : 원본 프로그램
(1) 프로그램을 실행하십시오. 프로그램이 사용자 입력을 기다리는 경우 "out.txt"의 텍스트 내용을 확인하십시오. 찾기 : 내용이 비어 있습니다.
(2) 프로그램을 실행하십시오. 사용자 입력 후 "out.txt"의 텍스트 내용을 확인하십시오. 찾기 : 내용은 "abcdefghij"입니다.
이것으로부터, 우리는 (01)과 (02)의 결과가 다르다는 것을 발견했다. out.txt 컨텐츠의 (01)가 비어있는 이유는 out.txt에 해당하는 버퍼 크기가 16 바이트이기 때문에 11 바이트 만 쓰기 때문에 명확한 버퍼 작동을 수행하지 않기 때문입니다 (즉, 버퍼 데이터를 출력 스트림에 쓰기).
Out.txt에 해당하는 내용은 "ABCDEFGHIJ"입니다. Out.Close ()가 실행되기 때문에 출력 스트림을 닫습니다. 출력 스트림을 닫기 전에 버퍼 데이터가 출력 스트림에 기록됩니다.
참고 : 리테스트 할 때 먼저 삭제하십시오 .txt.
유형 2 : readUserInput () 전에 다음 진술을 추가하십시오.
out.flush ();
이 문장의 목적은 "버퍼 컨텐츠"를 출력 스트림에 쓰는 것입니다.
(1) 프로그램을 실행하십시오. 프로그램이 사용자 입력을 기다리는 경우 "out.txt"의 텍스트 내용을 확인하십시오. 찾기 : 내용은 "abcdefghij"입니다.
(2) 프로그램을 실행하십시오. 사용자 입력 후 "out.txt"의 텍스트 내용을 확인하십시오. 찾기 : 내용은 "abcdefghij"입니다.
이것으로부터, 우리는 (01) 및 (02)와 동일한 결과가 out.txt의 해당 내용이 "abcdefghij"임을 발견했습니다. 플러시 () 작업이 수행되기 때문에 버퍼 데이터를 출력 스트림에 쓰는 데 사용되기 때문입니다.
참고 : 리테스트 할 때 먼저 삭제하십시오!
유형 3 : 첫 번째 유형을 기준으로
out.write (Arrayletters, 0, 10);
수정
out.write (Arrayletters, 0, 20);
(1) 프로그램을 실행하십시오. 프로그램이 사용자 입력을 기다리는 경우 "out.txt"의 텍스트 내용을 확인하십시오. 내용이 "abcdefghijklmnopqrst"(Enter 제외)인지 확인하십시오.
(02) 프로그램을 실행하십시오. 사용자 입력 후 "out.txt"의 텍스트 내용을 확인하십시오. 내용이 "abcdefghijklmnopqrst"(Enter 포함)인지 확인하십시오.
이것으로부터, 우리는 (01) 달리기의 결과가 "abcdefghijklmnopqrst"(캐리지 리턴 제외)임을 발견했다. 버퍼의 크기는 16이기 때문에 out.write (Arrayletters, 0, 20)를 통해 20 바이트를 작성하여 버퍼의 크기를 초과합니다. 현재 모든 입력은 버퍼를 통과하지 않고 출력 스트림에 직접 기록됩니다.
(3) 작업 결과는 "ABCDEFGHIJKLMNOPQRST"(캐리지 리턴 포함)입니다. Close ()를 실행할 때 캐리지 리턴 기호 '/n'이 출력 스트림에 기록되기 때문입니다.
참고 : 리테스트 할 때 먼저 삭제하십시오!