1. 기본 입력 스트림 및 출력 스트림 <br /> 흐름은 Java에서 가장 중요한 기본 개념 중 하나입니다. 파일 읽기 및 쓰기, 네트워크 전송 및 수신, 프로세스 통신 및 스트리밍은 입력 및 출력이 필요한 거의 모든 장소에서 사용됩니다.
스트리밍은 무엇에 사용됩니까? 입력 및 출력을위한 것입니다. 입력 및 출력이 "스트림"을 사용하는 이유는 무엇입니까? 프로그램 입력 및 출력의 기본 단위는 바이트이므로 입력은 바이트 문자열을 얻는 것이며 출력은 바이트 문자열을 보내는 것입니다. 그러나 대부분의 경우, 처리 전에 모든 바이트를받는 것은 불가능하지만 약간의 처리를받는 것은 불가능합니다. 예를 들어, 월드 오브 워크래프트를 다운로드하면 모든 것을 메모리에 다운로드하여 하드 디스크에 저장하는 것은 불가능하지만 다운로드하여 조금 저장하십시오. 현재이 방법은 매우 적합합니다.
Java에서는 각 스트림이 객체입니다. 스트림에는 입력 스트림 (입력 스트림)과 출력 스트림 (outputStream)의 두 가지 유형이 있습니다. 입력 스트림의 경우 스트림에서 바이트를 계속 제거하면 준비된 바이트 스트림을 전달하면됩니다.
스트림 객체는 어떻게 얻습니까? 다른 외부 시스템마다 스트림을 얻는 방법도 다릅니다. 예를 들어, 파일을 읽고 쓰면 FileInputStream/FileOutputStream 객체를 작성해야하며 네트워크 통신은 소켓 객체를 사용하여 입력 및 출력 스트림을 얻습니다. 일반적으로 클래스에 getInputStream () 또는 getOutputStream ()과 같은 메소드가있는 경우 스트림 객체를 통해 입력 및 출력임을 의미합니다.
입력 스트림은 입력 스트림입니다.
java.io.io.ioexcept; */ public class readfiledemo {// public static void main (string [] args) {c : /boot.ini "; try {is = new fileinputStream (filenotfoundException e) { "file" + path + "가 존재하지 않습니다 BYTE [0]; // 파일 읽기 내용을 저장 BYTE = 새로운 바이트 [10240]; 반환 값이 -1 인 경우 읽을 내용이 없음을 의미합니다. while (매번! = -1) {// 읽기 내용이 버퍼에 배치되어 이제 컨텐츠로 병합됩니다. contemptbytearrays (content, buffer, is.read); printstacktrace (); el. out.println (contenttr)}; ** * 2 바이트 문자열 병합 * * @param bytes1 바이트 스트링 2 * @param sizeofbytes2 bytes2에서 가져와야하는 길이 * * @ 첫 번째 sizeofbytes2 bytes1 및 bytes2*/ bytes2*/ private static byte [] concatbytearrays (byte [] bytes1, byte [] bytes2, int sizeofbytes2)의 병합 결과를 반환합니다. .length + sizeofbytes2); Arraycopy (bytes2, bytes1.length, sizeofbytes2);
그것은 매우 장점이지만, 이것은 실제로 InputStream의 기본 사용법입니다. 이것은 입력 스트림에서 바이트 문자열을 읽는 방법의 예일뿐입니다. 실제로 Java는 텍스트 파일을 더 쉽게 읽을 수있는 방법을 제공합니다. 나중에 소개됩니다.
출력 스트림 출력을 사용하는 것은 스트림에서 읽는 것보다 매우 간단한 것입니다. 예는 다음과 같습니다.
import java.io.file; saveFiledemo {public static void main (string [] args)은 ioexception {string path = "c : /now.txt"; ()) {System.err.println (파일을 생성 할 수 없습니다.} outputStream os = file); ) .toString () .getBytes (); System.out.println ( "파일 쓰기가 완료되었습니다.")};
Java는 또한 다른 스트리밍 작업을 제공하지만 모두 확장 또는 래퍼 입력 스트림 및 출력 스트림. 따라서이 두 클래스는 기초이며 이해되어야합니다.
2. 독자와 작가
입력 스트림 및 출력 스트림이 소개되고 독자와 작가가 소개됩니다. 이 두 클래스는 실제로 InputStream과 OutputStream을 감싸줍니다. 그러나 바이트가 아니라 문자를 처리합니다. 스트림의 내용이 텍스트 인 경우 Reader/Writer와 함께 처리하기가 더 쉽습니다. 다음은 Reader를 사용하여 텍스트 파일을 읽는 예입니다.
Java.io.filereader import java.io.Reader; String Path = "C :/Buffer [10240]; read (buffer)! = -1) {content += 새 문자열 (buffer, 0, count)}} {system.err.println ( "읽기 실패"); );} system.out.println (컨텐츠)}
Writer를 사용하여 텍스트 내용을 파일에 작성하는 방법에 대해서는 여기에 직접 작성하지 않습니다.
위의 예는 여전히 텍스트 파일을 읽는 가장 일반적인 방법이 아닙니다. Java는 일반적으로 텍스트 파일을 읽는 데 사용하는 BufferedReader를 제공합니다. 예는 다음과 같습니다.
Java.io.bufferedReader import java.io.ioexcept; path = "C :/boot.ini"; {line + "/n"} catch e) {system.err.println. }
3. 객체 직렬화 <br /> 객체 직렬화는 스트리밍 애플리케이션의 중요한 측면입니다. 직렬화는 객체를 일련의 바이트로 변환하는 것인데, 이는 사용하기 위해 다른 Java 프로그램으로 저장하거나 전달할 수 있습니다. ObjectOutputStream 및 ObjectInputStream은 직렬화 및 사막화에 특별히 사용됩니다. 간단한 예는 다음과 같습니다.
java.io.file java.io. java.io.eofexception import; *이 두 클래스는 각각 직렬화 및 사막화에 사용됩니다. */ public class serializationdemo {public static void main (String [] args)은 {string path = "c : /persons.data"; f. createnewfile ()} readpersons (path); PATH); 객체는 지정된 파일에 저장됩니다 프라이버시 정적 무효 writepersons (문자열 경로)는 ioexception {person [] person = new person [] {새로운 사람 ( "Zhang San", 23), New Person ( "Li Si", 24)} ObjectOutputStream oos = 새로운 파일 아웃 푸트 스트림 (Path)); //////// /////////////////////////////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////////4 //////////////////////////////////////////////////////////////////////////////////4 //////////// 사람은 직렬화 가능 {private int age {} 공개 사람 (string name, int age) {this.name = name; 이. {this.age = age;
이 예제는 두 클래스 모두 포장되어 있기 때문에 바이트와 문자를 읽고 쓸 수 없습니다. 위의 내용은 단순한 예일 뿐이며 직렬화를 잘 쓰고 싶다면 여전히주의를 기울여야 할 것이 많습니다. 직렬화에 대한 더 깊은 이해를 원한다면 여기에서 확인할 수 있습니다. 이 기사는 스트리밍과 관련된 부분에만 중점을 둡니다. 실제로 직렬화는 유연성을 줄이기 때문에 직렬화가 거의 사용되지 않으므로 일반적으로 사용하지 않으면 사용되지 않습니다.