728x90
  • 입출력은 컴퓨터 내부 또는 외부의 장치과 프로그램 간의 데이터를 주고받는 것을 말한다.
  • 스트림은 데이터를 운반하는데 사용되는 연결통로이다.
    JAVA의 스트림 API와 같은 용어이지만 다른 개념이다.
  • 스트림은 단방향통신만 가능하기에 하나의 스트림으로 입력과 출력을 동시에 진행할 수 없다.
    그래서 입출력을 동시에 진행하려면 입력 스트림(Input Stream), 출력 스트림(Output Stream) 2개의 스트림이 필요하다.
  • 스트림은 데이터 중간에 건너뜀 없이 연속적으로 데이터를 주고받는다.
  • 스트림의 기능을 보완하기 위한 보조 스트림이 존재한다.
    보조 스트림은 실제 데이터를 주고받는 스트림이 아니기 때문에 데이터의 입출력을 할 수는 없지만, 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있다.
  • 바이트기반의 스트림은 입출력 단위가 1 byte이다.
    하지만 Java에서는 한 문자를 의미하는 char형이 2 byte이기 때문에 바이트 기반 스트림으로 문자를 처리하는 데는 어려움이 있다.
    이를 보완하가 위해서 문자기반의 스트림이 제공된다.
  • 스트림을 이용한 작업이 종료된 후에는 close()를 호출해서 반드시 스트림을 닫아주어야 한다.
  • 표준 입출력은 콘솔을 통한 데이터 입출력을 의미한다.
  • 자바에서는 표준 입출력을 위해 [System.in, System.out, System.err] 3가지 입출력 스트림을 제공한다.
    위 스트림은 자바 애플리케이션 실행과 동시에 사용할 수 있게 자동적으로 생성되기 때문에 별도로 스트림을 생성하는 코드를 작성하지 않고도 사용 가능하다.
  • 직렬화(serialization)란 객체를 데이터 스트림으로 만드는 것을 뜻한다.
    반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역질렬화(deserialization)라 한다.
  • 직렬화가 가능한 클래스를 만드는 법은 해당 클래스가 Serializable 인터페이스를 구현하도록 하면 된다.
  • 클래스를 직렬화할 때 멤버 변수에 직렬화가 불가능한 객체가 있을 경우 에러가 발생한다.
    이때, 인스턴스변수의 타입이 아니라 실제로 연결된 객체의 타입에 의해서 결정된다.
  • 직렬화 대상에서 제외시키기 위해선 제어자 transient를 붙이면 된다.
    그 상태로 직렬화를 실행한 후, 역직렬화를 하면 해당 제어자가 붙은 변수의 데이터는 null이 된다.

+ Recent posts