Java 언어로 백준 단계별 풀어보기로 시작. ( Java 8, Java 11)
public class HelloWorld {
public static void main(String[] args) {
System.out.println( "Hello World~" );
}
}
자바는 내부적으로 (메모리 상에서) 문자열이 UTF-16 으로 인코딩되어 처리된다. 문자열 송/수신을 위해 직렬화가 필요할 때에는 변형된 UTF-8을 사용하게 되는데,
UTF-8과 UTF-16의 차이는 Byte 구성 방식에서 차이가 있다고 한다.
여기서 UTF-16은 거의 모든 문자가 2Byte로 구성된다. ( 몇몇 케이스의 경우에는 4Byte로 구성된다. )

하나하나 문자를 보내는 것이 아닌 한 번에 모아둔 다음 보내며 별다른 정규식을 검사하지 않으니 훨씬 속도가 빠르다.
정리하자면 바이트 단위 [InputStream]로 문자를 입력받아 문자(character) [InputStreamReader]로 처리한 뒤
버퍼(buffer) [BufferedReader]에 담아두었다가 일정 조건이 되면 버퍼를 비우면서 데이터를 보내는 것이다.
BufferedReader 을 통해 문자열을 받아온 뒤, Integer.ParseInt() 같은 파싱 함수들을 통해 타입을 변환해주는 것이, 성능(시간) 경쟁인 알고리즘에서는 훨씬 선호 될 수밖에 없다.
readLine() 은 한 행을 읽어오고, read() 는 한 문자만 읽어온다.close() Method를 사용하여 닫는 것은, 사용하지 않는 입력 또는 출력 스트림이 열리지 않도록 하기 위함이다.public static void main(String args[]) throws IOException{
...
} //익셉션(예외)가 발생하면 해당 클래스에서 벗어나게 된다는 것.