본문 바로가기

프로그램 이론/JAVA

[JAVA]입출력(I/O)

1. 입출력(I/O)

  1.1. 입출력(I/O)과 스트림(stream)

    - 입출력이란?

      - 입력과 출력을 줄여 부르는말

      - 두 대상 간의 데이터를 주고 받는 것

    - 스트림이란?

     - 데이타를 운반하는데 사용되는 연결통로

     - 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름

     - 하나의 스트림으로 입출력을 동시에 수행할 수 없다.(단방향 통신)

     - 입출력을 동시에 수행하려면 2개의 스트림이 필요하다.


 1.2. 바이트기반 스트림 - InputStream, OutputStream

   - 데이터를 바이트단위로 주고 받는다.


 1.3. 보조스트림

   - 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용

   - 독립적으로 입출력을 수행할 수 없다.


 1.4. 문자기반 스트림 - Reader, Writer

   - 입출력 단위가 문자인 스트림, 문자기반 스트림의 최고조상


 2. 바이트기반 스트림

   2.1. InputStream과 OutputStream

    - InputStream(바이트기반 입력스트림의 최고 조상)의 메서드


 - OutputStream(바이트기반 출력스트림의 최고 조상)의 메서드


2.2. ByteArrayInputStream과 ByteArrayOutputStream

  - 바이트배열에 데이터를 입출력하는 바이트기반 스트림


 2.2. ByteArrayInputStream과 ByteArrayOutputStream


 2.3. FileInputStream과 FileOutputStram

   - 파일에 데이터를 입출력하는 바이트기반 스트림


 3. 바이트기반 보조스트림

  3.1. FilterInputStream과 FilterOutputStram

   - 모든 바이트기반 보조스트림의 최고조상

   - 보조스트림은 자체적으로 입출력을 수행할 수 없다.

   - 상속을 통해 FilterInputStream/FilterOutputStream의 read()와 write()를 원하는 기능대로 오버라이딩해야한다.


 3.2. BufferedInputStream과 BufferedOutputStream

   - 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림


  - 보조스트림을 닫으면 기반스트림도 닫힌다.


 3.3. DataInputStream과 DataOutputStream

   - 기본형 단위로 읽고 쓰는 보조스트림

   - 각 자료형의 크기가 다르므로 출력할 때와 입력할 때 순서에 주의


 3.4. SequenceInputStream

   - 여러 입력스트림을 연결해서 하나의 스트림처럼 다룰 수 있게 해준다.


 3.5. PrintStream

   - 데이터를 다양한 형식의 문자로 출력하는 기능을 제공하는 보조스트림

   - System.out과 System.err이 PrintStream이다.

   - PrintStream보다 PrintWriter를 사용할 것을 권장한다.


 4. 문자기반 스트림

  4.1. Reader와 Writer

    - Reader(문자기반 입력스트림의 최고 조상)의 메서드


 - Writer(문자기반 출력스트림의 최고 조상)의 메서드


 4.2. FileReader와 FileWriter

   - 문자기반의 파일 입출력, 덱스트 파일의 입출력에 사용한다.


 4.3. PipedReader와 PidedWriter

   - 프로세스(쓰레드)간의 통신(데이터를 주고 받음)에 사용한다.


 4.4. StringReader와 StringWriter

   - CharArrayReader, CharArrayWriter처럼 메모리의 입출력에 사용한다.

   - StringWriter에 출력되는 데이터는 내부의 StringBuffer에 저장된다.


 5. 문자기반 보조스트림

  5.1. BufferedReader와 BufferedWriter

    - 입출력 효율을 높이기 위해 버퍼를 사용하는 보조스트림

    - 라인 단위의 입출력이 편리하다.


 5.2. InputStreamReader와 OutputStreamWriter

   - 바이트기반스트림을 문자기반스트림처럼 쓸 수 있게 해준다.

   - 인코딩을 변환하여 입출력할 수 있게 해준다.


 6. 표준입출력과 File

  6.1. 표준입출력 - System.in, System.out, System.err

    - 콘솔을 통한 데이터의 입출력을 표준 입출력이라 한다.

    - JVM이 시작되면서 자동적으로 생성되는 스트림이다.


 6.2. RandomAccessFile

   - 하나의 스트림으로 파일에 입력과 출력을 모두 수행할 수 있는 스트림

   - 다른 스트림들과 달리 Object의 자손이다.


 6.3. File - 생성자와 경로관련 메서드

   - 파일과 디렉토리를 다루는데 사용되는 클래스


 6.3. File - 파일의 속성, 생성, 삭제, 목록


 7. 직렬화(Serialization)

  7.1. 직렬화란?

    - 객체를 연속적인 데이터로 변환하는 것 반대과정은 역직렬화라고 한다.

    - 객체의 인스턴스변수들의 값을 일렬로 나열하는 것


  - 객체를 저장히기 위해서는 객체를 직렬화해야 한다.

  - 객체를 저장한다는 것은 객체의 모든 인스턴스변수의 값을 저장하는 것


 7.2. ObjectInputStreeam, ObjectOutputStream


  7.3. 직렬화 가능한 클래스 만들기


 


 7.4. 직렬화 가능한 클래스의 버전관리


'프로그램 이론 > JAVA' 카테고리의 다른 글

[JAVA]네트워킹(Networking)  (0) 2018.05.29
[JAVA]람다와 스트림(Lambda & Stream)  (0) 2018.05.29
[JAVA]AWT와 애플릿  (0) 2018.05.28
[JAVA]쓰레드(Thread)  (0) 2018.05.28
[JAVA]지네릭스, 열거형, 애너테이션  (0) 2018.05.28