Buffer -> 임시 저장 공간
Buffer를 이해하기 전에 Stream 대한 이해가 필요하다.
Stream 이란?
마치 수도꼭지와 비슷한데 수도꼭지에서 물을 틀어서 그 물이 수도관을 통해서 내려가게 되는데 이 수도꼭지를 여는 순간 물이 이동하는 물의 흐름을 Stream이라고 한다. 이 물의 흐름을 프로그램에서는 전류의 흐름으로 다룬다.
흔히 Stream은 컴퓨터를 이용하면서 늘상 존재하는데 키보드를 사용할 때도 키보드에서 누르는 자판의 신호를 전기적 신호로 본체에 전달해서 원하는 문자열이 모니터에 다시 출력되기까지는 수많은 전기선과 장치들로 전류가 이동하면서 일을 하기 때문에 사용할 수 있는 것이다.
그럼 조금만 생각해 보면 Stream이라는 것은 흐름이라 흐름을 주는 쪽과 받는 쪽으로 나눠지게 되는데 어떠한 데이터를 전류를 통해서 보내는 쪽을 OutPut(출력)이라고 하고 그 흐름을 받는 쪽을 Input(입력)이라고 한다.
이제 것 결과만 출력하던 console창이었지만 지금은 Byte Stream이 연결돼있기 때문에 위 프로그램을 실행하면 프로그램이 끝나지 않고 12번 라인에서 블락당한 상태로 키보드에서 무엇인가 입력할 때까지 기다리고 있다.
그리고 a를 입력해 보면 97이라는 숫자가 나온다.
여기서 a는 인코딩 전 데이터라고 하고 인코딩 된 데이터는 2진수로 변환되게 된다.(부호화) 그리고 다시 in.read()(디코딩)를 만나서 10진수로 변환돼서 97로 결괏값이 나오게 된 것이다.
정리
1. 키보드에 a를 인코딩해서 2진수로 컴퓨터에게 전송
2. ByteStream으로 흘러들어 간다(input)
3. read() 메서드로 2진수를 97로 디코딩한다.
그리고 ByteSream은 1Byte만 전송할 수 있기 때문에 하나의 문자밖에 받지 못한다.
그래서 통신의 기본은 인코딩(컴퓨터가 이해할 수 있는 데이터)이 된 데이터를 디코딩(사람이 이용할 수 있는 데이터)한다는 것이다.
그럼 문자열을 전 송하기 위해서는 어떻게 해야 할까?
Bufferd Reader
이 InputStreamReader를 사용하면 위 주석에 적혀있는 것처럼 가변적으로 받을 수 없기 때문에 배열을 1000개 만들어서 가변적인 것처럼 문자를 받는다 한들 남는 나머지 문자 - 1000만큼의 공간이 낭비된다. 그래서 이 InputStreamReader 조차 사용하지 않는데 이 단점을 보안하기 위해서 나온 것이 바로 Buffer다.
Buffer
BufferedReader를 사용하니 그냥 String으로 해서 얼마든지 가변적인 문자열을 받아낼 수 있게 됐다.
엄청 편하다
그럼 이 Buffer는 무엇일까?
위 그림과 같은 메커니즘으로 얼마든지 가변 길이의 데이터를 주고받을 수 있게 되는 것이다
마치 철로가 있고 그 철로 위로 엄청나게 많은 물자를 주고받는 것과 같은 것이다.
'JAVA,객체지향' 카테고리의 다른 글
소켓통신 실습 (일대일) (0) | 2021.12.03 |
---|---|
소켓통신 개념(포트(port)개념) (0) | 2021.12.02 |
String Constant Pool (2) | 2021.12.02 |
예외처리란? (0) | 2021.12.01 |
스레드란? (0) | 2021.12.01 |