"안녕하세요 아미고! 오늘은 엘리가 아답터 패턴에 대해 알려드렸습니다."

I/O 스트림과 관련된 대부분의 클래스는 어댑터로 구현됩니다. 그들은 동등한 인터페이스를 변환하거나 간단한 것부터 시작하여 복잡한 것으로 이동하면서 연결합니다.

" InputStreamReaderBufferedReader 도 어댑터입니까? 적어도 사용 방식은 어댑터와 매우 유사합니다. 객체가 생성된 후 다른 클래스의 생성자에게 전달됩니다."

"그렇습니다. InputStreamReader는 InputStream 인터페이스를 Reader 인터페이스 로 변환합니다 . BufferedReader는 가장 순수한 형태의 어댑터가 아닙니다. Java의 작성자가 해당 메서드에 별도의 인터페이스를 제공하지 않기로 결정했기 때문입니다. 그러나 일종의 정신입니다."

엄청나게 다양한 클래스를 작성하는 대신 Java 작성자는 24개의 어댑터를 작성하여 프로그래머가 원하는 대로 서로 연결할 수 있도록 했습니다.

이 접근 방식은 매우 편리합니다. 프로그래머는 항상 자신의 클래스 및/또는 어댑터를 작성하고 표준 인터페이스를 구현하고 자신이 만들고 있는 어댑터 개체 체인에 포함할 수 있습니다.

"그래서 모든 것이 작동하는 방식입니다. 크고 복잡한 클래스 대신 간단한 개체와 어댑터의 체인을 만듭니다. 그런 다음 올바른 순서로 만들고 결합하기만 하면 됩니다!"

"그리고 빠진 것은 무엇이든 구현합니다."

"예, 알겠습니다."

"하지만 사실 오늘은 ReaderWriter 에 대해 말씀드리고 싶었습니다 . 이들은 InputStream 및 OutputStream 클래스와 매우 유사한 두 개의 추상 클래스입니다. 그러나 이러한 클래스와 달리 이 두 클래스는 문자와 함께 작동합니다. 문자를 읽고 씁니다. 텍스트 정보로 작업할 때 매우 편리합니다. 그들이 가지고 있는 방법을 살펴봅시다:"

독자 방법 메서드가 수행하는 작업
int read(char[] cbuf);
"이 방법은 버퍼가 가득 찰 때까지 또는 소스에 더 이상 읽을 문자가 없을 때까지 여러 문자를 버퍼 ( char 배열 ) 로 즉시 읽습니다 ." 이 메서드는 실제로 읽은 문자 수를 반환합니다(배열 길이보다 작을 수 있음).
int read();
"이 메서드는 한 문자를 읽고 반환합니다. 결과는 조회를 위해 int로 확장됩니다. 사용 가능한 문자가 없으면 메서드는 -1을 반환합니다."
boolean ready();
이 메서드는 읽기 메서드에 대해 읽지 않은 문자가 있는 경우 true를 반환합니다.
void close();
이 방법은 스트림을 «닫습니다». 스트림 작업을 마치면 이것을 호출합니다.
그런 다음 개체는 파일 등을 닫는 데 필요한 관리 작업을 수행합니다.
이 시점에서 스트림에서 더 이상 데이터를 읽을 수 없습니다.

"Reader의 read(char [] cbuf) 메서드를 사용하면 한 번에 한 문자가 아닌 전체 문자 블록을 읽을 수 있습니다. 따라서 더 빠르고 편리합니다."

"정확합니다. 이제 Writer가 어떤 메서드를 가지고 있는지 살펴보겠습니다."

방법 메서드가 수행하는 작업
void write(int c);
이 방법은 한 문자를 씁니다. int 유형은 char로 좁혀집니다. 여분의 부분은 단순히 버려집니다.
void write(char[] cbuff);
이 메서드는 문자 배열을 씁니다.
void write(String s);
이 메서드는 문자열을 씁니다. 단순히 문자 배열로 변환된 다음 두 번째 메서드가 호출됩니다.
void flush();
스트림이 아직 기록되지 않은 데이터를 내부적으로 저장하고 있는 경우 이 메서드는 데이터를 강제로 기록합니다.
void close();
이 방법은 스트림을 «닫습니다». 스트림 작업을 마치면 이것을 호출합니다.
그런 다음 개체는 파일 등을 닫는 데 필요한 관리 작업을 수행합니다. 더 이상 스트림에 데이터를 쓸 수 없으며 플러시가 자동으로 호출됩니다.

ReaderWriter가 추상 클래스라는 것을 이해하는 것이 중요합니다 . 그들은 아무것도 하지 않으며 사실상 코드를 포함하지 않습니다. 모든 메소드는 이를 상속하는 클래스에서 구현해야 합니다. 그들의 임무는 클래스가 상호 작용하는 방식을 표준화하는 것 입니다 . 개발자는 서로 상호 작용하기 위해 자체 표준을 만들 필요가 없습니다. 모든 사람이 몇 가지 기본 표준을 유지하는 것이 훨씬 더 편리합니다. 이를 통해 다른 프로그래머가 작성한 클래스가 Java 작성자가 작성한 클래스뿐만 아니라 다른 프로그래머가 작성한 클래스와도 쉽게 상호 작용할 수 있습니다.

표준은 강력합니다.

"동의합니다. 공통 표준을 지원하는 것은 모두에게 유익합니다."