이 글에서는 주로 Java 프로그래밍 IO 흐름 정보 관련 정보를 자세히 소개합니다. 필요한 친구는
java IO 세부 설명:
Java를 참조하세요. 스트림 작업과 관련된 클래스 또는 인터페이스:
Java 스트림 클래스 다이어그램 구조:
의 개념 스트림과 기능
스트림은 시작점과 끝점이 있는 연속적인 바이트의 집합입니다. 이는 데이터 전송에 대한 일반적인 용어 또는 요약입니다. 즉, 두 장치 간의 데이터 전송을 스트림이라고 합니다. 스트림의 본질은 데이터 전송입니다. 데이터 전송의 특성에 따라 스트림을 다양한 범주로 추상화하여 보다 직관적인 데이터 작업을 가능하게 합니다.
IO 스트림 분류
처리되는 데이터 유형에 따라 문자 스트림과 바이트 스트림으로 구분됩니다.
다양한 데이터 흐름 방향에 따라 입력 스트림과 출력 스트림
문자 스트림과 바이트 스트림으로 구분됩니다
문자 스트림의 기원: 데이터 인코딩이 다르기 때문에 문자에 대해 효율적인 작업을 수행하는 스트림 객체가 있습니다. 실제로 바이트 스트림을 기반으로 읽을 때 지정된 코드 테이블을 확인하는 것이 핵심입니다. 바이트 스트림과 문자 스트림의 차이점:
읽기 단위와 쓰기 단위가 다릅니다. 바이트 스트림은 바이트(8비트) 단위이고 문자 스트림은 문자 단위입니다. 단위와 문자는 코드 테이블에 따라 매핑되며 한 번에 여러 바이트를 읽을 수 있습니다.
처리 개체가 다릅니다. 바이트 스트림은 모든 유형의 데이터(그림, avi 등)를 처리할 수 있는 반면 문자 스트림은 문자 유형의 데이터만 처리할 수 있습니다.
결론: 일반 텍스트 데이터를 다루는 한 문자 스트림 사용에 우선순위를 두십시오. 그렇지 않으면 바이트 스트림이 사용됩니다.
입력 스트림과 출력 스트림
입력 스트림은 읽기만 가능하고 출력 스트림은 쓰기만 가능합니다. 프로그램은 데이터의 다양한 특성에 따라 서로 다른 스트림을 사용해야 합니다. 전송됩니다.
Java IO 스트림 객체
1. 입력 바이트 스트림 InputStreamIO의 입력 바이트 스트림의 상속 다이어그램은 위 그림에서 볼 수 있듯이 볼 수 있습니다.
InputStream은 모든 입력 바이트 스트림의 상위 클래스이며 추상 클래스입니다.
ByteArrayInputStream, StringBufferInputStream 및 FileInputStream은 각각 바이트 배열, StringBuffer 및 로컬 파일에서 데이터를 읽습니다. PipedInputStream은 다른 스레드와 공유되는 파이프에서 데이터를 읽습니다. Piped에 관련된 지식은 나중에 별도로 소개하겠습니다.
ObjectInputStream 및 FilterInputStream의 모든 하위 클래스는 데코레이션 스트림(데코레이터 패턴의 주역)입니다. 2. 출력 바이트 스트림 OutputStream
IO의 출력 바이트 스트림 상속 다이어그램은 위 그림에서 볼 수 있습니다.
OutputStream은 다음과 같습니다. 모든 출력 바이트 스트림 추상 클래스인 의 상위 클래스입니다. ByteArrayOutputStream과 FileOutputStream은 각각 바이트 배열과 로컬 파일에 데이터를 쓰는 두 가지 기본 미디어 스트림입니다. PipedOutputStream은 다른 스레드와 공유되는 파이프에 데이터를 씁니다. ObjectOutputStream 및 FilterOutputStream의 모든 하위 클래스는 장식 스트림입니다. 3. 바이트 스트림의 입출력 대응
그림에서 파란색 부분이 주요 대응 부분, 빨간색 부분이 비 대응 부분 . 보라색 점선은 이러한 스트림이 일반적으로 함께 사용됨을 나타냅니다. 위 그림에서 볼 수 있듯이 Java IO의 바이트 스트림은 매우 대칭적입니다. "존재와 합리성" 이러한 바이트 스트림에서 덜 대칭적인 클래스 중 일부를 살펴보겠습니다!
1.LineNumberInputStream은 주로 스트림에서 데이터 읽기를 완료하고 해당 라인 번호를 가져옵니다. 분기 시기와 위치는 클래스 변경에 따라 적극적으로 결정되며, 해당 라인 번호는 없습니다. 원래 라인 번호. 출력 부분에는 해당 부분이 없습니다. LineNumberOutputStream을 직접 만들 수 있습니다. 처음 작성할 때 기준선 번호가 있을 것입니다. 앞으로는 줄바꿈이 발생할 때마다 다음 줄에 줄 번호가 추가됩니다. 괜찮은 것 같습니다. 인기가 더욱 떨어지는 것 같습니다.
2. PushbackInputStream의 기능은 마지막 바이트를 확인하고 만족하지 않으면 버퍼에 넣는 것입니다. 주로 컴파일러의 구문 및 어휘 분석 부분에 사용됩니다. 출력 부분의 BufferedOutputStream은 거의 유사한 기능을 구현합니다.
3.StringBufferInputStream은 더 이상 사용되지 않으며 주로 문자열이 문자 스트림의 범위에 속해야 하기 때문에 InputStream 부분에 표시되어서는 안 됩니다. 버려졌으니 당연히 출력 부분에서는 필요가 없습니다! 이전 버전과의 호환성을 유지하기 위해서만 존재하는 것도 허용됩니다.
4.SequenceInputStream은 두 개 이상의 입력 스트림을 하나의 입력 스트림으로 순차적으로 읽는 도구 클래스로 간주할 수 있습니다. IO 패키지에서 완전히 제거할 수 있으며 IO 패키지의 구조에 전혀 영향을 주지 않지만 더 "순수한" 즉 순수 데코레이터 모드로 만듭니다.
5.PrintStream은 보조 도구로도 간주될 수 있습니다. 주로 다른 출력 스트림이나 FileInputStream에 데이터를 쓸 수 있으며 내부 구현은 여전히 버퍼링됩니다. 본질적으로 이는 다른 스트림을 포괄적으로 적용하기 위한 도구일 뿐입니다. IO 패키지를 쫓아낼 수도 있습니다! System.out 및 System.out은 PrintStream의 인스턴스입니다!
4. 문자 입력 스트림 Reader
위의 상속 다이어그램에서 볼 수 있듯이:
1.Reader는 모든 입력 문자 스트림입니다. 의 클래스는 추상 클래스입니다.
2.CharReader와 StringReader는 각각 Char 배열과 String에서 데이터를 읽는 두 가지 기본 미디어 스트림입니다. PipedReader는 다른 스레드와 공유되는 파이프에서 데이터를 읽습니다.
3.BufferedReader는 분명히 데코레이터이며 그 하위 클래스는 다른 Reader 객체를 장식하는 일을 담당합니다.
4.FilterReader는 모든 사용자 지정 특정 장식 스트림의 상위 클래스입니다. 해당 하위 클래스인 PushbackReader는 Reader 개체를 장식하고 줄 번호를 추가합니다.
5.InputStreamReader는 바이트 스트림과 문자 스트림을 연결하는 브리지입니다. FileReader는 이 기능을 구현하기 위해 일반적으로 사용되는 도구 클래스라고 할 수 있습니다. 소스 코드에서는 FileInputStream을 Reader로 변환하는 방법이 사용됩니다. 우리는 이 수업에서 특정한 요령을 얻을 수 있습니다. Reader의 각 클래스의 목적과 사용방법은 기본적으로 InputStream의 클래스와 동일합니다. 나중에 Reader와 InputStream 사이에 상응하는 관계가 있을 것입니다. 5. 문자 출력 스트림 Writer
위의 관계도에서 볼 수 있듯이:
1.Writer는 모든 출력 문자 스트림의 상위 클래스이며 추상 클래스입니다.
2.CharArrayWriter와 StringWriter는 각각 Char 배열과 String에 데이터를 쓰는 두 가지 기본 미디어 스트림입니다. PipedWriter는 다른 스레드와 공유되는 파이프에 데이터를 씁니다.
3. BufferedWriter는 Writer에 버퍼링 기능을 제공하는 데코레이터입니다.
4.PrintWriter와 PrintStream은 매우 유사하며 기능과 용도도 매우 유사합니다.
5. OutputStreamWriter는 OutputStream에서 Writer로 변환하기 위한 브리지입니다. FileWriter의 하위 클래스는 실제로 이 기능을 구현하는 특정 클래스입니다(자세한 내용은 SourceCode를 참조하세요). 기능과 사용법은 OutputStream과 매우 유사하며 해당 다이어그램은 나중에 표시됩니다. 6. 문자 스트림의 입력과 출력의 대응
7. 문자 스트림과 바이트 스트림 변환
변환 스트림의 특징 :
문자 스트림과 바이트 스트림 사이의 브리지입니다.
읽은 바이트 데이터를 지정된 인코딩을 통해 문자로 변환할 수 있습니다.
은 지정된 인코딩을 통해 읽은 문자 데이터를 바이트로 변환할 수 있습니다.
변환 스트림은 언제 사용합니까?
바이트와 문자 사이에 변환 작업이 있는 경우
스트림 작업의 데이터를 인코딩하거나 디코딩해야 하는 경우.
특정 객체 구현:
InputStreamReader:바이트-문자 브리지
OutputStreamWriter:문자 대 바이트 브리지
이 두 스트림 객체는 문자 시스템의 구성원이며 자체적으로 문자 스트림입니다. 생성 중에 바이트 스트림 객체를 전달해야 합니다.
8.파일 클래스
파일 클래스는 파일 시스템의 파일과 폴더를 캡슐화하는 객체로, 객체 개념을 통해 파일과 폴더를 조작할 수 있습니다. . File 클래스는 파일 이름, 파일 길이, 마지막 수정 시간, 읽을 수 있는지 여부, 현재 파일의 경로 이름 가져오기, 지정된 파일이 존재하는지 확인, 파일 목록에서 파일 목록 가져오기 등 파일 또는 디렉터리의 다양한 메타데이터 정보를 저장합니다. 현재 디렉토리, 파일 및 디렉토리 생성, 삭제 등
9.RandomAccessFile 클래스
이 객체는 스트림 시스템의 구성원이 아니며 버퍼(문자 배열)도 캡슐화합니다. 내부 포인터를 통해 문자 배열의 데이터. 이 개체의 특징:
이 개체는 파일만 작동할 수 있으므로 생성자는 두 가지 유형의 매개변수를 받습니다. a. 파일 개체. 이 개체는 파일을 읽고 쓸 수 있습니다. 개체를 인스턴스화할 때 작업 모드(r, rw)를 지정할 수 있습니다.
참고: 작업할 파일이 있으면 개체가 인스턴스화됩니다. 존재하지 않는 경우 자동으로 생성되며, 파일이 존재하고 쓰기 데이터의 위치가 지정되지 않은 경우 처음부터 기록됩니다. 즉, 원본 내용을 덮어씁니다. 은 다중 스레드 다운로드 또는 다중 스레드가 동시에 파일에 데이터를 쓰는 데 사용할 수 있습니다.
위 내용은 Java 프로그래밍의 IO 흐름 정보에 대한 자세한 내용이며, 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!