
System.out이 바로 PrintStream의 인스턴스다. 바이트 기반 스트림이지만, 문자열과 기본 데이터 타입을 쉽게 출력할 수 있는 메서드들을 제공한다.PrintStream과 유사한 기능을 제공하지만 문자 기반 스트림이다. 이는 문자 데이터를 처리할 때 더 효율적이며, 시스템의 기본 문자 인코딩에 의존하지 않는다는 장점이 있다.Java에서 정의한 기본적인 데이터 타입들을 사용해서 데이터를 쓰거나 저장한다는 뜻이다.
Java의 기본 데이터 타입에는 int, float, double, boolean, char, byte, short, long 등이 있다.
예를 들어, DataOutputStream을 사용할 때, 이 스트림은 writeInt, writeFloat, writeDouble, writeBoolean, writeChar, writeByte, writeShort, writeLong과 같은 메서드들을 제공한다. 이 메서드들은 각각의 기본 데이터 타입에 맞게 데이터를 쓰는 기능을 수행한다.
이렇게 기본 데이터 타입을 사용하여 데이터를 쓰는 것은, 데이터를 바이트 단위로 직접 처리하는 것보다 더 직관적이고 오류를 줄일 수 있으며, 데이터의 타입을 명확하게 유지할 수 있다는 장점이 있다. 데이터를 이런 방식으로 쓰면, 나중에 DataInputStream을 통해 데이터를 읽을 때도 동일한 타입으로 쉽게 읽을 수 있다.
readObject 메서드를 통해 직렬화된 객체를 읽어 Java 객체로 복원한다.writeObject 메서드를 사용하여 객체를 직렬화하여 출력한다.Java I/O 스트림 중 버퍼링을 통해 입출력 효율을 높이는 역할을 한다.
BufferedInputStream은 기본 입력 스트림에 버퍼링 기능을 추가한다. 이 클래스는 내부적으로 데이터를 버퍼에 저장하고, 필요할 때 버퍼에서 데이터를 읽어들인다. 이 과정은 읽기 연산의 횟수를 줄여주어 성능을 향상시킨다.FileInputStream과 같은 기본 입력 스트림을 생성한 후, 이를 BufferedInputStream의 생성자에 전달하여 사용한다. 이렇게 하면 파일에서 데이터를 읽을 때, 한 번에 한 바이트씩 읽는 대신 여러 바이트를 버퍼에 담아서 읽을 수 있게 된다.BufferedOutputStream 역시 기본 출력 스트림에 버퍼링 기능을 추가한다. 이 클래스는 출력할 데이터를 내부 버퍼에 쌓아두고, 버퍼가 가득 차거나 스트림이 닫힐 때 데이터를 실제 출력 소스에 전달한다.FileOutputStream과 같은 기본 출력 스트림을 생성한 후, 이를 BufferedOutputStream의 생성자에 전달하여 사용한다. 이렇게 하면 데이터를 출력할 때 한 번에 한 바이트씩 쓰는 대신 버퍼에 모아서 쓸 수 있다.BufferedOutputStream을 사용하면 데이터를 즉시 출력하는 것보다 효율적으로 데이터를 쓸 수 있으며, 시스템 리소스를 더 효율적으로 사용할 수 있다.BufferedInputStream과 BufferedOutputStream은 특히 대용량 데이터를 처리할 때, 혹은 많은 수의 작은 입출력 연산이 필요할 때 매우 유용하다. 이들은 Java에서 파일이나 네트워크를 통한 데이터 처리에 자주 사용되는 중요한 클래스들이다.