Java 언어의 입력 및 출력 기능은 매우 강력하고 유연하며 데이터의 입력 및 출력 작업은 "스트림"방식으로 수행됩니다. J2SDK는 패키지 java.io에 정의 된 다양한 유형의 데이터를 얻기위한 다양한 "스트림"클래스를 제공합니다. 데이터는 표준 방법을 통해 프로그램의 입력 또는 출력입니다.
Java의 스트림은 다른 관점에서 분류 할 수 있습니다.
스트림의 방향에 따라 : 입력 스트림 및 출력 스트림으로 나뉩니다.
다른 데이터 단위에 따르면 : 바이트 스트림 (8 비트)과 문자 스트림 (16 비트)으로 나뉩니다.
다른 함수에 따라 : 노드 흐름 및 처리 흐름으로 나뉩니다.
노드 흐름 : 특정 데이터 소스 (노드)에서 데이터를 읽고 쓸 수있는 흐름 (예 : 파일, 메모리)입니다. 수도꼭지에 연결된 단일 튜브와 물이 방출되기 시작합니다.
처리 흐름 : 기존 스트림 (노드 흐름 또는 처리 흐름)에서 "연결"되어 프로그램에 처리 데이터를 통해보다 강력한 읽기 및 쓰기 기능을 제공합니다. 파이프 (노드 흐름)를 연결하는 것과 마찬가지로, 몇 개의 두껍고 특수 기능 파이프 (가공 흐름)가 유출 물의 추가 처리에 적용됩니다.
Java.io 패키지에 위치한 J2SDK가 제공하는 모든 스트림 유형은 다음 4 가지 추상 스트림 유형을 상속합니다.
4 개의 기본 스트림 InputStream, OutputStream, Reader 및 Writer는 더 많은 특정 서브 클래스를 가지고 있으며,이 서브 클래스는 파일 스트림, 버퍼 스트림, 데이터 스트림, 변환 스트림, 인쇄 스트림, 객체 스트림 등으로 나뉘어져 있으며 특정 기능이 있거나 특정 데이터를 작동하는 데 사용됩니다. 그중에서도 어두운 색상은 노드 흐름을 나타내고 밝은 색상은 처리 흐름을 나타냅니다.
여기서 우리는 노드 흐름 및 처리 흐름을 통한 특정 흐름 사용을 요약합니다.
노드 흐름의 분류 :
노드 스트림 프로세스 파일 (파일), 배열 (메모리의 배열), 문자열 (문자열) 및 파이프 (파이프).
처리 흐름의 분류 :
일반적으로 사용되는 처리 스트림에는 버퍼 스트림, 변환 스트림, 데이터 스트림, 객체 스트림 및 인쇄 스트림이 포함됩니다.
버퍼링 스트림 : 해당 바이트 스트림에 소켓을 뿌려야하며 읽기 및 쓰기 효율성을 향상시키고 더 편리한 방법을 추가하는 판독 및 서면 데이터에 대한 버퍼링 기능을 제공해야합니다.
버퍼 흐름의 기능은 버킷과 같습니다. 원래 바이트 흐름은 워터 파이프입니다. 워터 파이프는 목적지에 직접 연결됩니다. 버퍼 흐름을 첨가 한 후, 버킷은 워터 파이프 아래에 연결된 다음 양동이에 물로 채워진 후 목적지에 붓습니다. 버퍼링 역할을합니다. 이렇게하면 한 번에 더 많은 데이터를 읽을 수 있으며, 하드 디스크에 대한 자주 읽기와 쓰기를 피할 수 있습니다. 버퍼링 기능이 있으므로 데이터를 작성할 때 플러시 방법을 사용해야합니다.
java.io.*; public class testbufferstream {public static void main (string [] args) {try {bufferedwriter bw = new bufferedWriter (new filewriter ( "f : //java//io/dat.txt"); // 서면 파일의 바이트 스트림의 버퍼링 스트림 BufferedReader Br = New BufledReader (신약. filereader ( "f : //java//io/dat.txt"); // 파일 읽기 string의 바이트 스트림에서 버퍼링 된 스트림 s = null; for (int i = 1; i <= 100; i ++) {s = string.valueof (math.random ()); // s 할당 bw.write (s); // s write s dat.txt 파일 bw.newline (); // 라인 브레이크 문자를 작성합니다. 버퍼링 된 스트림을 사용하는 더 좋은 방법은 일련의 데이터를 작성하거나 읽는 것입니다. } bw.flush (); // 메모리의 모든 데이터를 즉시 작성하고 더 이상 버퍼링하지 않습니다. while ((s = br.readline ())! = null) {// line system.out.println (s)별로 파일 내용을 읽습니다. } bw.close (); // 처리 흐름을 닫고 내부의 노드 흐름을 닫습니다. br.close (); } catch (ioexception e) {e.printstacktrace (); }}} 흐름 변환 : 바이트 데이터로 변환하여 문자 데이터로 전환하십시오. InputStreamReader에는 입력 소매점이 필요하며 출력 스트림 라이터는 출력 소설가가 필요합니다.
데이터 흐름 : DatainputStream 및 DataOutputStream은 기본 데이터 유형을 파일에 쓰거나 읽습니다. 이 스트림은 크게 사용됩니다. 그러한 스트림이 없으면 8 바이트 만 차지하는 시간이 길다. 파일에 쓰기를 원한다면 문자열로 변환 한 다음 문자 배열로 변환해야합니다. 공간이 많이 차지합니다. 그러나이 스트림에서는 매우 편리합니다. 이 8 바이트를 파일에 작성하면 메모리 공간을 절약 할뿐만 아니라 프로그램을보다 편리하고 간단하게 만듭니다. 그러나 읽을 때주의를 기울여야합니다. 읽은 데이터 유형에 따라 포인터가 하향으로 이동하므로 읽은 순서는 올바른 요구를 달성하기 위해 쓰기 순서와 일치해야합니다. 그렇지 않으면 데이터를 분할하는 것과 같습니다.
java.io.*; 공개 클래스 TestDatastream {public static void main (String [] args) {bytearrayoutputStream baos = new BytearRayoutputStream (); // 노드 흐름을 만듭니다. DataOutputStream dos = 새로운 DataOutputStream (BAOS); // 노드 스트림에서 데이터 스트림 "파이프"를 연결하십시오 {dos.writedouble (math.random ()); // 이중 유형, 8 바이트 dos.writeboolean (true); // 부울 유형은 하나의 바이 테어 레라 히인 푸트 스트림 bais = 새로운 ByteArrayInputStream (baos.tobytearray ())를 차지합니다. System.out.println (bais.available ()); // 출력 스트림에서 사용 가능한 총 바이트 수 --9 DatainputStream dis = new DatainputStream (BAIS); // 출력 스트림 시스템 외부의 데이터 스트림 "파이프"를 연결합니다. // 이중 유형 번호 System.out.println (dis.readboolean ()); // boolean type dos.close ()를 턴을 읽습니다. 드러내다(); } catch (ioexception e) {e.printstacktrace (); }}}
인쇄 스트림 : java.io는 인쇄를위한 스트림을 제공합니다. 이 유형의 스트림에는 쓸 때 자동으로 플러시하는 기능이 있으므로 인쇄 할 때마다 플러시 할 필요가 없습니다.
java.io.*; public class testprintstream1 {public static void main (String [] args) {printstream ps = null; {fileoutputStream fos = new FileOutputStream ( "f : //java//io/log.dat"); // 출력 스트림 생성을 지정하고 출력 위치를 지정합니다. // 스트림 외부의 인쇄 스트림을 포장} catch (ioException e) {e.printstacktrace (); } if (ps! = null) {system.setout (ps); // 시스템의 인쇄를 인쇄 스트림으로 설정합니다 ps} int ln = 0; for (char c = 0; c <= 60000; c ++) {system.out.print (c+""); // DOS 창에 인쇄하지 않으면 출력 스트림은 (ln ++> = 100) {System.out.println (); ln = 0 인 경우 지정된 파일에 직접 인쇄됩니다. }}}}