흐르다
5217 단어 흐르다
한 번에 다 읽는 거라고 생각할 수도 있어요.
int bytesAvailable = in.available();
if(bytesAvailable>0){
byte[] data = new byte[bytesAvailable];
in.read(data);
}
(4) 흐르는 읽기와 쓰기를 완성할 때close 방법을 사용해서 닫아야 한다.이 방법은 매우 제한된 시스템 자원을 방출할 것이다. 만약 응용 프로그램이 너무 많은 흐름을 열어 그들을 닫지 않았다면 시스템 자원은 다 소모될 것이다.출력 흐름을 닫는 동시에 출력 흐름에 사용할 버퍼를 비웁니다. 더 큰 패키지 형식으로 전달될 문자가 출력 흐름을 닫을 때 버퍼에 임시로 설치되어 있습니다.특히 파일을 닫지 않으면 바이트를 쓰는 마지막 가방이 영원히 전달되지 않을 수도 있습니다.flush 방법을 통해 이 흐름을 비울 수 있다고 볼 수 있습니다.1.2 완전한 흐름 가족 (1) 자바에는 다양한 흐름 유형을 포함하는 클래스가 60개가 넘는다.주로 처리 바이트와 문자 두 개의 단독 차원 구조로 나뉜다.InputStream과 OutputStream 클래스는 하나의 바이트나 바이트 그룹을 읽을 수 있습니다.문자열과 숫자를 읽고 쓰려면 더 강한 하위 클래스가 필요합니다.예를 들어 DataInputStream과 DataOutputStream은 모든 기본 자바 형식을 이진 형식으로 읽을 수 있습니다.ZipInputStream과 ZipOutputStream은 일반적인 ZIP 압축 형식으로 파일을 읽고 쓸 수 있습니다.(2) 유니코드 텍스트의 경우 추상 클래스 리더와 Writer의 하위 클래스를 사용할 수 있습니다.Reader와 Writer 클래스의 기본 방법은 InputStream 및 OutputStream의 방법과 유사합니다.abstract int read () abstract void write (byte[] b)read 방법은 유니코드 코드를 되돌려주거나, 파일의 끝에 닿을 때 -1을 되돌려줍니다.write 메서드는 호출할 때 유니코드 코드를 전달합니다.(3) Java SE 5.0은 4개의 추가 인터페이스를 도입했다. 그것이 바로 Closeable,Flushable,Readable,Appendable이다.Closeable에는 메서드 void close() throws IOException이 있습니다.Flushable에는 메서드 void flush () throws IOException이 있습니다.Readable에는 방법public int read(java.nio.CharBuffer cb)throws IOException이 있습니다.CharBuffer 클래스는 메모리의 버퍼나 메모리 이미지의 파일을 표시하는 순서와 무작위 읽기 접근 방법을 가지고 있습니다.Appendable 보유 메서드 Appendable append(CharSequence csq) throws IOException;//지정된 문자 시퀀스를 이 Appendable에 추가합니다.Appendable append(CharSequence csq, int start, int end) throws IOException;//지정된 문자 시퀀스의 하위 시퀀스를 이 Appendable에 추가합니다.Appendable append(char c) throws IOException;//지정된 문자를 이 Appendable에 추가합니다.CharSequence 인터페이스는char값 서열의 기본 속성을 설명합니다.String,CharBuffer,StringBuilder,StringBuffer로 이루어집니다.Input Stream, Output Stream, Reader와 Writer는 모두 Closeable 인터페이스를 실행했고 Output Stream과 Writer는 Flushable 인터페이스를 실현했다.Writer만 Appendable 인터페이스 1.3 조합 흐름 필터 (1) File Input Stream과 File Output Stream만 디스크 파일의 입력 출력 흐름 e.g를 제공할 수 있습니다.
FileInputStream fis = new FileInputStream("file.txt");
byte b = (byte)fis.read();
주의: 모든java 때문에.io의 클래스는 상대 경로를 사용자 작업 디렉터리로 시작하여 System을 호출하는 것으로 해석합니다.getProperty ("user.dir") 는 추상 클래스인 InputStream과 OutputStream과 같이 바이트 레벨에서의 읽기와 쓰기를 지원합니다. 즉 바이트와 바이트 그룹만 읽을 수 있습니다.DataInputStream만 있다고 가정하면 숫자 형식만 읽을 수 있고 파일에서 데이터를 얻는 방법은 없습니다.이러한 상황에 대해 자바는 유연한 메커니즘을 사용하여 이 두 가지 직책을 분리했다.일부 흐름 (예: File Input Stream) 은 파일과 다른 외부 위치에서 바이트를 얻을 수 있고, 다른 흐름 (Data Input Stream 또는 Print Writer) 은 바이트를 더 유용한 데이터 형식으로 조립할 수 있다.e.g. 파일에서 숫자를 읽으면 먼저 File InputStream을 만들고 Data InputStream 구조자에게 전달합니다
FileInputStream fis = new FileInputStream("file.txt");
DataInputStream dis = new DataInputStream(fis);
double num = dis.readDouble();
e.g. 버퍼 메커니즘을 사용하고 DataInputStream을 사용하고자 함
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("file.txt")));
(3)Pushback InputStream: 여러 개의 흐름이 연결될 때 각 중개 흐름(intermediate stream)을 추적합니다. 예를 들어 입력을 읽을 때 다음 바이트가 원하는 값인지 확인해야 합니다.읽기 종료 바이트를 읽은 후 코드 세션에서 이 바이트를 '읽기 취소' 할 수 있습니다. 그러면 입력 흐름의 다음 읽기 동작은 되돌아오는 바이트를 다시 읽을 수 있습니다.e.g. 읽기 취소(push back)
PushbackInputStream pis = new PushbackInputStream(new BufferedInputStream(new FileInputStream("file.txt")));// PushbackInputStream
int b = pis.read(); //
if(((char)b) != '<'){
pis.unread(b); // ,
}
e.g. 입력 스트림 읽기 가능 숫자
DataInputStream dis = new DataInputStream(new PushbackInputStream
(new BufferedInputStream(new FileInputStream("file.txt"))));
e.g. ZIP 파일 읽기
ZipInputStream zis = new ZipInputStream(new FileInputStream("file.zip"));
DataInputStream dis = new DataInputStream(zis);