ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java :: 자바 입출력 패키지
    IT/Java & JSP & FW 2012. 3. 22. 21:23
    Byte Stream - 영어, 음악 기타 등등
    Character Stream - 영어권을 제외한 모든 나라의 언어 
    Object Stream - 네트워크를 통해 객체를 주고 받을 수 있다. 


    Stream?
    - Data를 목적지로 Input(읽는다)/Output(쓴다)하기 위한 방법이다.
    - Stream에 Data를 쓸 수 있고, Stream에서 Data를 읽을 수 있다.
    - Stream에 Data를 쓸 경우, 이러한 Stream을 output stream이라고 한다.
    - Stream에서 Data를 읽을 경우, 이러한 Stream을 input stream이라고 한다.


    Stream의 특징
    Stream은 FIFO 구조이다.
    - FIFO구조란 먼저 들어간 것이 먼저 나오는 형태로서 Data의 순서가 바뀌지 않는다는 특징이 있다.
    Stream은 단방향이다.
    - Java에서 Stream은 읽기, 쓰기가 동시에 되지 않는다. 따라서 읽기, 쓰기가 필요하다면 읽는 Stream과 쓰는 Stream을 하나씩 열어 사용해야 한다.
    Stream은 지연될 수 있다.
    - Stream은 넣어진 Data가 처리되기 전까지는 Stream에 사용되는 Thread는 지연상태에 빠진다. 따라서 Network 내에서는 Data가 모두 전송되기 전까지 Network Thread는 지연상태가 된다.


    File class 
    - System에 있는 file이나 directory를 추상화한 class이다.
    - File class를 이용하면 file의 크기, 생성, 삭제, 변경 및 마직막 수정날짜 등 다양한 정보를 알 수 있는 method를 제공하고 있다.


    File class의 주요 method



    Byte Stream
    - Byte Stream은 1byte를 Input/Output 할 수 있는 Stream이다.
    - 일반적으로 Byte로 구성된 file, 즉 동영상 file, Image file, 음악 file을 처리하기에 적합한 Stream이다.


    Byte Stream의 종류



    Byte Input Stream의 구조

    FileInputStream, ObjectinputStream , DataInputStream, BufferedInputStream 많이 사용한다.


    Byte Output Stream 구조

    FileOutputStream, ObjectOutputStream, DataOutputStream, PrintStream 많이 사용한다.


    Byte Input Stream(InputStream)
    - InputStream은 Byte Input을 수행하는 데 필요한 method를 정의하는 추상 class이다.
    - Java Program은 Object를 생성하고 생성된 Object와 Byte Stream과 연결함으로써 file을 연다.
    - Java는 다른 장치들과도 Byte Stream을 연결할 되어 있는고 Program이 시작되면 장치들과 연결된 세 개의 Object(System.in, System.out, System.err)를 생성한다.
    - System.in Object는 Keyboard로 Byte를 Input할 수 있는 InputStream Object이다.


    InputStream 의 주요 method

     
     
    FileInputStream
    - FileInputStream은 System에 있는 모든 file을 읽을 수 있는 기능을 제공한다.
    - file을 읽을 때는 file의 경로와 file Object를 Constructor의 parameter로 설정할 수 있다.
    - 만약, file이 존재하지 않으면 FileNotFoundException을 발생하게 된다.
    - 주요 생성자



    DataInputStream
    - DataInput Interface는 Input Stream으로부터 기본형 Data를 읽기 위한 method를 정의한다.
    - DataInput Interface는 Primitive Data Type을 읽을 수 있는 각종 method와 Character를 읽을 수 있는 method를 정의 하고 있다.
    - DataInputStream class의 Constructor는 한 개로 구성되어 있으며, 어떠한 예외 처리도 되어 있지 않다.
    - 주요 생성자

     

    BufferedInputStream (가장 많이 활용)
    - Bufferring은 Input/Output 수행을 향상 시킨 기술이다.
    - Bufferring이란 논리적 Data 덩어리들이 하나의 큰 물리적 Input 연산으로서 file로부터 읽혀서 Buffer로 Input 하는 것을 말한다.
    - Bufferring을 이용하면 Data를 읽어서 Buffer를 꽉 채우고, 연속된 read() method 호출의 경우는 단지 memory Buffer로부터 Data를 읽어 내는 것일뿐으므로 훨씬 효율적이다.
    - 또한 mark 기능과 reset 기능을 구현 추가로 구현하였다.
    - 주요 생성자

     

    Byte Output Stream(OutputStream)
    - OutputStream은 Byte Output을 수행하는 필요한 method를 정의한 abstract class이다.
    - Program이 시작 되면 장치와 연결된 두 개의 Output Stream은 System.out, System.err를 생성한다.
    - System.out Object는 화면에 Data를 Output 한다.
    - System.err Object는 화면에 error Message를 Output하게 된다.
    - 주요 method

     

    FileOutputStream
    - FileOutputStream은 System에 있는 모든 file에 쓸 수 있는 기능을 제공한다.
    - 만약 Object를 생성할 때 , file이 존재하지 않으면 FileNotFoundException을 발생하게 된다.
    - Object가 생성되면 file이 있는 경우에는 file을 생성하지 않으며 file이 없는 경우에는 file을 생성하게 된다.
    - FileNotFoundException의 의미는 경로가 일치하지 않을 때 발생하는 예외이다. 즉 경로는 일치하고 file이 없는 경우에는 예외가 발생하지 않고 file 생성하게 된다.
    - 주요 생성자



    BufferedOutputStream
    - 이 class를 사용하면 Buffer가 채워질 때마다 한번에 대량으로 Output장치로의 실제 전송이 수행된다.
    - OutputStream은 Output 속도의 향상을 위해서 flush() method를 정의하고 있다. 하지만 실제로는 구현되지 않았다.
    - flush란 Buffer가 다 차지 않더라도 Buffer를 비워주는 기능.
    - flush 기능을 구현한 class가 바로 BufferedOutput-Stream class가 된다.
    - 주요 method 


     
    PrintStream
    - PrintStream은 모든 Data Type을 Output할 수 있는 print(), println() method가 Overloading 되어 있다.
    - Program이 시작되면 장치와 연결된 OutputStream인 System.out, System.err Object가 PrintStream Object다.

    - Java 5.0에서는 PrintStream의 format() method와 printf() method가 추가되어 있기 때문에 이전의 System.out.printf() 나 System.out.format()을 이용해서 Output문을 작성할 수 있었다.


    PrintStream은 두 가지 중요한 특징을 가진다.
    첫번째, 다른 Stream과는 다르게 flush 기능을 자동으로 처리할 수 있는 Constructor를 가지고 있다.
    두번째, 모든 method의 예외처리를 하지 않았다는 점이다. 


    Character Stream의 특징 
    Byte Stream에 추가하여 Reader와 Writer class를 제공하는데, 이것은 2Byte를 Input/Output 할 수 있는 Character 기반 Stream이다.
    Byte Stream은 1Byte를 Input/Output하기 때문에 일반적으로 영문자로 구성된 file,  동영상 file, 음악 file의 Input/Output 등에 적합한 Stream이다.
    Character Stream은 2Byte를 Input/Output하기 때문에 세계 모든 언어로 구성된 file을 Input/Output 하기에 적합하다

     
    Character Stream의 구조
    Character Stream은 Reader와 Writer로 나눈다.
    Character Input Stream – Reader
    Character Output Stream - Writer


    Character Input Stream의 구조 

     
     
    Character Output Stream의 구조



    Reader 
    - Reader class는 Character Input Stream의 최상위 abstract class이다.
    - InputStream class와 거의 같은 method를 제공하고 있으며, 차이점은 Reader class는 2Byte를 읽을 수 있는 method로 구성되었다는 점이다.
    - 주요 method

     
     
    FileReader
    - FileReaderclass는 System에 있는 file을 읽을 수 있는 기능을 제공한다.
    - file을 읽을 때는 file의 경로,  File Object를 Constructor의 parameter로 지정할 수 있다.
    - file이 존재 하지 않으면 FileNotFoundException 예외를 발생한다.
    - FileReader class는 Character Stream으로 한Character를 읽기 때문에 화면에 Output하더라도 한글 깨지는 현상이 일어나지 않는다.
    - 주요 생성자



    BufferedReader
    - Byte Input Stream의 BufferedInputStream과 동일한 기능을 제공하는 BufferedReader class는 Character Output Stream의 효율적인 Bufferring을 가능하게 한다. 
    - 주요 생성자

    - BufferedReaderclass에는 readLine() method가 추가 되었는데, 이 method는 한 줄 단위로 읽는 method이다.

    - 이 때, 한 줄의 끝을 ‘\r’,’\n’ 중의 하나가 올 경우 또는 ‘\r\n’이 오는 경우를 한 줄의 끝으로 간주한다. 


    Writer
    - Writer class는 Character Output Stream의 최상위 abstract class이며, OutputStream과 거의 같은 method를 제공한다
    - Writer class는 2Byte를 Output할 수 있는 method로 구성되어 있다.
    - 주요 method

     

    FileWriter
    - FileWriter class는 Character file에 Output할 때 사용하는 class이다.
    - FileWriter class의 Constructor는 file의 경로, File Object를 이용하여 Object를 생성할 수 있다.
    - 만약, 경로가 실제로 존재하지 않으면 IOException를 발생하게 된다.(FileNotFoundException예외가 아님)
    - 주요 생성자

     

    BufferedWriter
    - Byte Output Stream의 BufferedOutputStream과 동일한 기능을 제공하며, Character Output Stream의 효율적인 Bufferring을 가능하게 한다.
    - 주요 생성자

    - Object를 생성할 때는 예외처리를 하지 않아도 된다.
    - 한 줄 내려쓰기를 할 수 있는 newLine() method가 추가되었다. 
     

    PrintWriter
    - PrintWriter class는 다른 Stream과 다르게 Byte Output Stream과 Character Output Stream을 가지고 Object를 생성할 수 있는 class이다.
    - 자동 flush 기능을 가지고 있다.
    - PrintWriter class의 Constructor에는 FileNotFoundException 예외를 발생하기 때문에 반드시 예외처리를 해야 한다.
    - 주요 생성자



    InputStreamReader와 OutputStreamWriter
    InputStreamReader
    Byte Input Stream=>Character Input Stream
    OutputStreamWriter
    Byte Output Stream = > Character Output Stream
    ※ InputStreamReader의 주요 생성자

    ※ OutputStreamWriter의 주요 생성자



    Scanner
    - JDK 5.0에서는 java.util package에 Scanner class를 제공.
    - Scanner class는 Input 값(Character열, file, Input Stream)을 정규 표현식으로 구분하여 Character열이나 기본 Data type으로 token 할 수 있는 class이다.
    - 정규 표현식이란 Language을 표현 할 수 있는 Character식을 말한다.

    http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html

    - 이렇게 구분된 token은 다양한 nextXXX() method를 사용하여 다른 type의 값으로 바뀌게 된다.


    Scanner class의 Constructor
    - Scanner class는 parameter로 네 가지 type을 갖는다.
    - 네 가지 type – File, InputStream, Readable, String
    - Scanner class는 네 가지 type을 parameter로 구분자나 구분 패턴을 사용하여 Character열이나 Primitive Data type으로 token 할 수 있는 class다.
    - 주요 생성자 

     - 주요 method


     
    Object의 직렬화
    - Object의 직렬화란 Object를 Stream으로 file에 저장하는 방법.
    - Object를 직렬화하기 위한 두 가지 방법으로 Serializable과 Externalizable Interface 구현하면 된다.

     
    Serializable
    - Serializable Interface를 구현한 class를 작성하면 해당 class의 모든 Member변수가 직렬화 대상이 된다. 
    - Object가 Stream을 통해 직렬화 될 때는 Object에 있는 Member변수가 직렬화 되는 것이다.
    - Object의 Member변수 중에 직렬화 대상에 제외하고 싶다면 transient Keyword를 사용하면 된다.


    Externalizable
    - Externalizable Interface는 Serializable Interface의 Sub Interface이다.
    - Externalizable Interface를 구현한 class는 위의 두 가지 method를 이용하여 특정 Member 변수만을 직렬화 할 수 있는 기능을 제공한다.


    Object Stream
    - Object를 직렬화 하고 다시 역직렬화 시킬 수 있는 class가 ObjectInputStream과 ObjectOutputStream 이다.

     
    ObjectOutputStream
    - ObjectOutput Interface를 구현한 class로 Object를 file에 기록 가능한 class이다.
    - ObjectOutput Interface는 writeObject(Object obj) method를 포함하는데 이 method가 Object의 Data를 직렬화 시켜주는 method(직렬화 method)이다.
    - 만약 obj가 Serializable Interface로 구현되어 있지 않다면 NotSerializableException 예외가 발생한다.
    - 보통 직렬화된 Data를 저장할 file 확장자는 “ser”로 한다.


    ObjectInputStream
    - ObjectInput Interface를 구현한 class로 직렬화 된 Object를 읽어올 수 있는 class이다.
    - ObjectInput Interface는 readObject() method를 포함하는데 이 method는 Object의 Data를 복원 시켜주는 method(역 직렬화 method)이다.
     
     
    StreamTokenizer
    - Character Input Stream을 token 단위로 나눠서 관리할 수 있는 class이다.
    - Character Input Stream을 읽을 때 token의 유형을 Character와 숫자로 구분할 수 있기 때문에 Character와 숫자로 구성된 file을 읽을 유용하게 쓰일 수 있다.
    - 주요 생성자 

    - 주요 멤버변수 



    RandomAccessFile

    - Input Stream과 Output Stream의 두가지 기능을 가지고 있는 Stream이며, 기존의 Input Stream과 달리 한 번 읽었던 Input Stream을 다시 읽을 수 있는 Stream이다.
    - 주요 생성자

Designed by Tistory.