스트림은 바이트 시퀀스의 추상 개념입니다.
파일은 정적 스토리지 데이터 형식이며 스트림은 데이터가 전송 될 때 양식을 참조합니다.
스트림 클래스는 노드 스트림 클래스와 필터링 스트림 클래스 (프로세스 스트림 클래스라고도 함)의 두 가지 주요 범주로 나뉩니다.
대상 장치에 해당하는 클래스를 노드 플로우 클래스라고합니다. 이 프로그램은 또한 간접 흐름 클래스를 통해 노드 흐름 클래스를 호출하여 다양한 유형의 데이터를보다 유연하고 편리하게 읽을 수 있습니다. 이 간접 흐름 클래스는 필터 흐름 클래스 (처리 흐름 클래스라고도 함) 또는 포장 클래스입니다.
래퍼 클래스의 통화 프로세스는 다음과 같습니다.
흐름 분류 사이의 관계
스트림의 분류가 얼마나 풍부하고 복잡하더라도 그 뿌리는 네 가지 기본 클래스에서 나옵니다. 이 네 가지 클래스 사이의 관계는 다음과 같습니다.
| 바이트 스트림 | 캐릭터 스트림 | |
| 입력 스트림 | 입력 스트림 | 리더 |
| 출력 스트림 | 출력 스트림 | 작가 |
유니 코드는 Java로 저장된 문자를 인코딩하고 문자 스트림 처리 클래스는 Java에서 다른 외부 코드 캐릭터 스트림과 유니 코드 문자 스트림을 변환하는 데 책임이 있습니다. Classs InputStreamReader 및 OutputStreamWriter는 문자 스트림 및 바이트 스트림의 변환을 처리합니다. 문자 스트림 (한 번에 하나의 버퍼를 처리 할 수 있음)은 바이트 스트림 (한 번에 하나의 바이트)보다 하나의 작업에서 더 효율적입니다.
입력 스트림
InputStream 및 OutputStream은 절제 클래스이므로 어떤 IO 장치에 해당하는지 표시 할 수 없습니다. 네트워크, 파이프 라인, 메모리, 파일 등과 같은 특정 IO 장치 및 실제 프로그램에 사용되는 다양한 하위 클래스 개체와 같은 특정 IO 장치를 포함하여 많은 서브 클래스가 있습니다.
참고 : 노드 흐름 클래스에 해당하는 IO 소스 및 대상을 스트림 노드 (노드)에 호출합니다.
참고 : 파일 A에서 파일 B의 내용을 작성할 때, 프로그램은 파일 A의 작동에 출력 클래스 또는 입력 클래스를 사용합니다. 입력 및 출력 클래스는 파일을 대신하여 입력 및 출력 클래스를 작성하여 파일 A에서 작업을 완료하여 파일 B에서 작업을 완료해야합니다.
출력 스트림
캐릭터 지향 스트림 독자/작가
유니 코드 문자로 향하는 스트림은 스트림에서 읽거나 정보를 유니 코드 문자로 스트림에 쓰는 것을 의미합니다. 마찬가지로 독자/작가도 절약 수업입니다.
리더
작가
IO 프로그램 코드 재사용 :
일반적으로 코드를 작성할 때 -1을 키보드 입력의 끝으로 사용하고 서면 기능에서 직접 시스템을 사용하지 마십시오. 함수를 호출 할 때 System.in은 매개 변수로 전달됩니다. 이러한 방식으로, 수동 키보드 입력을 대체하기 위해 향후 파일의 데이터를 읽으려면이 기능을 직접 사용할 수 있으므로 프로그램이 너무 많은 수정을 할 필요가 없어 변경되지 않고 변경에 적응하는 효과를 달성 할 필요가 없습니다.
바이트 스트림과 문자 스트림의 변환
inputStreamReader 및 outputStreamReader : 바이트 지향 스트림을 문자 지향 스트림으로 변환합니다.
InputStreamReader 클래스는 바이트 스트림에서 문자 스트림으로의 브리지입니다. 바이트로 읽히고 지정된 인코딩 방법에 따라 문자 스트림으로 변환합니다.
사용 된 인코딩 방법은 이름 또는 플랫폼에 허용되는 기본 인코딩 메소드로 지정 될 수 있습니다.
inputStreamReader의 read () 메소드 중 하나에 대한 각 호출은 기본 바이트 입력 스트림에서 하나 이상의 바이트를 읽을 수 있습니다.
더 높은 효율을 달성하려면 BufferedReader로 InputStreamReader를 캡슐화하는 것을 고려하십시오.
bufferedReader in = new bufferedReader (new inputStreamReader (System.In));
Java 스트리밍 사용 요약
나는 가장 전문적인 작업에서 많은 Java 스트림을 만났으며 요약은 다음과 같습니다.
1. zip 형식을 생성합니다. 직면 한 것은 서블릿에서 Zip 파일을 생성하고 웹 클라이언트에 출력 한 후 직접 다운로드하는 것입니다.
Response.setContentType ( "응용 프로그램/zip"); response.addheader ( "Content-Disposition", "첨부 파일; filename =/"xxx.zip/ ""); ZipOutputStream out = () {zipentry entry = new Zipentry ( "aa" + i ".dat"); out.putNewentry (Entry); 바이트 [] bt = s.getBytes (); out.writeBytes (bt, 0, bt.length ()); out.closeentry (); } out.flush (); out.close (); ZipoutPutStream은 java.io.filteroutputStream에서 상속합니다. 따라서 실제 쓰기 작업은 매개 변수 OutputStream Out을 통해 작성됩니다.
void write (byte [] b, int off, int len)는 마침내 호출 (b, off, len);
zip 파일을 생성하려면 새 ZipoutPutStream (새 파일 아웃 PutStream (Path))을 작성하십시오.
2. 유사한 쓰기 XML.
xmlwriter writer = new xmlwriter (new FileoutputStream (Path), Formatter)
Writer.write (Doc). 원리는 위와 유사합니다
3. 텍스트 파일을 작성하고 추가하십시오.
PrintStream PS = New PrintStream (New FileOutputStream (Path, True), "UTF-8") ps.Println (S); // 부울, int 등과 같은 다양한 유형을 쓸 수 있습니다.PrintSteam은 FilterOutputStream에서 상속합니다
DataOutputStream out = 새로운 DataOutputStream (socket.getOutputStream ()); out.writeBytes (bt); out.writeboolean (부울 V);
DataOutputStream도 필터 아웃 푸트 스트림입니다.
5. 텍스트를 읽으십시오
BufferedReader reader = New BufferedReader (New Filereader (PATH)); reader.readline ();
버퍼링 리더 패턴은 위의 필터 패턴과 동일합니다. 독자 객체가 매개 변수로 전달되고 실제로 읽는 데 사용되는 객체를 저장합니다.
BufferedReader의 Java 1.0에 해당하는 클래스는 BufferedInputStream이며, 이는 FilterInputStream입니다.
6. 소켓에서 읽으십시오
bufferedInputStream은 = new bufferedInputStream (socket.getInputStream ()); is.read (bt, 0, bt.length ());
요약 :
기본 클래스 스트림 시리즈는 입력 스트림 및 출력 스트림입니다. 그것들은 추상 클래스이며 필요한 유일한 방법은 (예로서 출력)입니다.
void write (int b)는 ioexception을 던집니다. void write (byte b [])는 ioexceptionVoid write (byte b [], int off, int len)
가장 기본적인 것은 바이트 작동입니다. 첫 번째 방법은 정수를 작성하는 것처럼 보이지만 실제로는 하나의 바이트 (가장 낮은 8 비트) 만 씁니다. 서브 클래스는 두 개의 시리즈로 나뉩니다. 하나는 출력 장치를 직접 작동하는 것입니다. 위에서 만난 것은 파일 (FileOutputStream) 및 서블릿 출력 (ServletOutputStream)입니다. 일반적으로 사용되는 다른 것들도 BytearRayoutputStream이며 메모리에서 직접 작동합니다.
다음은 OutputStream 객체 시트 매개 변수를 수신하는 FilterOutputStream 시리즈이며 실제 쓰기 작업은 객체를 통해 완료됩니다. 예를 들어 ZipoutputStream은 압축 데이터를 생성하는 것만 담당합니다. 이 데이터가 파일, 메모리 또는 ServletRepponse에 기록되어 있는지 여부는 입력 매개 변수에 의해 결정됩니다. 이것은 데코레이터 패턴입니다.
필터 시리즈에서 일반적으로 사용되는 작업에는 PrintStream (Printtream, Println, Writ
DataOutputStream도 있으며 WriteByte/WriteBoolean/Writedouble/Writelong/Wiretutf 및 기타 방법을 제공합니다.
소켓/지퍼 및 일반적으로 사용되지 않는 다른 것들도 있습니다.
Java 스트리밍은 매우 편리하고 복잡합니다. 복잡성은 함수를 구현하려면 종종 여러 클래스가 필요하며 여러 조합이 있음을 의미합니다. 실제로 실제로 요약해야합니다.