ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스트림
    java 2019. 5. 21. 16:04

    필터스트림 

    inputStream과 outputStream은 
    단일 바이트나 그룹 바이트를 읽고 쓴다 . 

    그 바이트를 어떤 형태인지 결정하는 것은 프로그래머역량

    데이터 형식으로 변환하기 위해 저수준스트림에 연결가능한
    스트림을 제공 

    reader와 writer로 나뉨 


    필터 연결하기 

    필터는 생성자에 의해 스트림에 연결된다.

    생성할 때 필터 체인을 쓸 수 있다. 
    예)
    InputStream in = new FileInputStream("data.txt");
    in = new BufferedInputStream(in);

    위와 같은 코드를 
    다음과 같이 사용 가능하다 

    -> DataOutputStream dout = new DataOutputStream(
    new BufferedOutputStream(
     new FileOutputStream("data.txt")
     )
    );

    이렇게 생성된 필터의 연결을 영구적이며, 필터를 스트림으로부터 분리 할 수 없다.

    버퍼 스트림 

    여러 바이트를 한번에 쓰는 것이 작은 양으로 여러번 나눠 쓰는것 보다 더 나은 성능을 보인다 .

    BufferedInputStream , BufferedOutputStream 처럼 두개의 생성자가 있다. 

    public BufferedInputStream(InputStream in)
    public BufferedInputStream(InputStream in, int bufferSize)
    public BufferedOutputStream(OutputStream out)
    public BufferedOutputStream(OutputStream out, int bufferSize)

    BufferedInputStream의 첫 번째 인자는 버퍼링 되지 않은 데이터를 읽게 될 하위스트림 
    BufferedOutputStream의 첫 번째 인자는 버퍼링 되지 않은 데이터를 쓰게 될 하위스트림

    입력 버퍼의 기본값은 2,048 바이트가 설정 
    출력 버퍼는 512바이트가 설정된다. 

    데이터 스트림 

    자바의 기본 데이터 타입과 바이너리 포맷의 문자열을 읽고 쓰기 위한 메소드를 제공한다. 
    바이너리 형식의 두개의 다른 자바프로그램이 네트워크 연결이나 데이터 파일
    파이프, 또는 다른 매개체를 통해 데이터를 교환하기 위한 목적으로 주로 사용된다.

    기본적으로 유닉스프로토콜이랑 자바는 비슷하다하 다른 방식의 프로토콜과는 잘 살펴봐야한다.




    reader와와 writer

    코드를 작성할 때 모든 텍스트가 아스키라고 가정하거나 
    플랫폼에제 제한된 인코딩을 따르는 안좋은 습관을 가지고 있다. 
    그러나 현대에는 다양한 지역화된 인코딩을 사용한다.
    자바는 입출력 스트림 클래스 계층에 거의 완벽하게 대응하고
    바이트대신 문자를 다룰 수있도록 설계된 클래스를 체공한다. 

    reader와 writer의 서브 클래스 중에서 InputStreamReader와
    outputStreamWriter 클래스가 가장 중요하다.
    InputStreamReadersms raw 바이트를 읽을수 있는 하위 스트림을 
    포함하고  읽어들인 raw 바이트를 지정된 인코딩에 따라 유니코드문자로
    변환한다. 
    OutputStreamWriter는 실행 중인 프로그램으로 부터 유니코드 문자를 전달받고 
    지정된 인코딩을 사용하여 바이트로 변환한다. 그리고 바이트를 내장된 하위 출력 
    스트림에 쓴다. 

    available() 메소드는 실행이 중단되지 않고 읽을 수 있는 최소 바이트 수를 int타입으로 
    반환하지만 ready()메소드는 reader가 중단되지 않고 읽을 수 있는지를 가리키는 boolean값을
    반환한다. 
    UTF-8을 포함한 몇몇 문자를 읽어서 버퍼에 저장해 보지 않고서는 네트워크 버퍼나 파일시스템
    버퍼에서 얼마나 많은 문자를 읽어 들일 수 있는지 알 수없다 . 

    InputStreamReader는 Reader의 가장 중요한 서브 클래스 다. InputStreamReader는
    FileInputStream이나 TelnetInputStream 같은 내장된 하위 입력 스트림으로 부터 바이트를
    읽고 지정된 타입에 따라 문자로 변환하여 반환한다. 

    인코딩 타입을 알수 없으면 기본 인코딩이 사용됨 
    인코딩 타임이 명시된 경우에는 UnsupportedEncodingException이 발생한다.

    예를 들어 다음 메소드는 입력 스트림을 읽고 MacCyrillic 인코딩타입을 사용하여
    하나의 유니코드 문자열로 변환한다.

    InputStreamRrader r = new InputStreamReader(in, "MacCyrillic");
    StringBuilder sb = new StringBuilder();
    int c ;
    while((c = r.read())! = -1)sb.append((char) c);
    return sb.toString();


    필터 reader와 필터 writer 

    inputStreamReader와 OutputStreamWriter 클래스는 
    입출력 스트림을 바이트 중심의 인터페이스에서 문자중심의 인터페이스로 변환하는 역할을 한다. 

    이 작업이 끝나면 또 다른 필터에 올려놓을 수 있다.
    BufferedReader
    BufferedWriter
    LineNumberReader
    pushbackreader
    PrintWriter 


    InputStreamRrader r = new InputStreamReader(in, "MacCyrillic");
    r = new BufferedReader(r.1024);
    StringBuilder sb = new StringBuilder();
    int c ;
    while((c = r.read())! = -1) sb.append((char) c);
    return sb.toString();

    이런식으로 사용함 




















    'java' 카테고리의 다른 글

    자바로 배우는 리팩토리 입문 0장  (0) 2019.05.12
    OS 메모리사용량, CPU사용량  (0) 2019.05.08
    HTTPS 통신  (0) 2019.05.02
    스트림  (0) 2019.01.04
Designed by Tistory.