흐르다

5217 단어 흐르다
입력 흐름: 바이트 서열을 읽을 수 있는 대상을 입력 흐름이라고 합니다.출력 흐름: 바이트 시퀀스에 쓸 수 있는 대상을 출력 흐름이라고 합니다.추상 클래스인 InputStream과 OutPutStream은 계층 구조의 입력/출력(IO) 클래스의 기초를 이루고 있습니다.바이트에 대한 흐름은 유니코드 형식으로 저장된 정보를 처리하기 불편하기 때문에 추상적인 클래스인 Reader와 Writer에서 유니코드 문자를 처리하는 클래스를 계승하여 하나의 단독 차원 구조를 구성한다.이러한 클래스가 가지고 있는 읽기와 쓰기 동작은 모두 두 바이트의 유니코드 코드를 기반으로 하는 것이지 한 바이트의 문자를 기반으로 하는 것이 아니다.1.1 읽기 바이트 (1) InputStream 클래스에는 추상적인 방법인 abstract int read () 가 있습니다. 이 방법은 한 바이트를 읽고 읽은 바이트를 되돌려주거나 입력 원본의 끝에 들어갈 때 -1을 되돌려줍니다.구체적인 입력 클래스를 설계할 때, 이 방법을 덮어써서 적응된 기능을 제공해야 한다.FileInputStream 클래스에서 이 방법은 파일에서 바이트를 읽고 시스템으로 읽습니다.in(InputStream의 하위 클래스로 예정된 대상)은 키보드에서 정보를 읽습니다.InputStream 클래스는 바이트 그룹을 읽거나 대량의 바이트를 건너뛸 수 있는 비추상적인 방법도 있습니다.이 방법들은 추상적인read 방법을 사용해야 하기 때문에 각 하위 클래스는read () 방법을 덮어쓰기만 하면 된다.OutputStream 클래스는 출력 위치에 바이트를 쓸 수 있는 유사한 추상적인 방법인 abstract void write (int b) 를 제공합니다.(2)read와 write 방법은 바이트가 읽히거나 쓸 때까지 실행될 때 막힙니다.이것은 흐름이 즉각 접근할 수 없으면 (일반적으로 네트워크 연결이 바쁘기 때문에) 현재의 라인이 막힌다는 것을 의미한다.이것은 이 방법이 지정한 흐름이 사용할 수 있는 시간을 기다리는 동안 다른 라인에서 유용한 작업을 수행할 수 있는 기회를 준다.(3) int available () 방법은 현재 읽을 수 있는 바이트의 수를 검사할 수 있도록 합니다. 그러면 막힐 수 없는 코드 세션을 얻을 수 있습니다.
한 번에 다 읽는 거라고 생각할 수도 있어요.
    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);
 

좋은 웹페이지 즐겨찾기