속도차이를 극복하기 위해 만든 임시저장공간을 말한다
간단한 예로는 우리가 유튜브를보다가 영상이 멈추면 버퍼링에 걸렸다고 말한다
그리고 재생바를 보면 영상의 현재위치인 빨간색막대와
회색막대가 보일것이다. 이 회색막대가 바로 버퍼이다
즉 우리가 버퍼없이 동영상을 보면 데이터를 다 받은다음에 동영상을 봐야되는데
버퍼라는 임시저장공간에 계속 조금씩 조금씩 다운로드를 해놓기때문에
우리가 영상을 다 다운하지 않아도 영상을 볼 수 있다
우리가 모래사장에 있는 모래를 옮기려고 할때 한알씩 줏어서 옮기면 얼마나 걸릴까?
아마 죽을때까지 못옮길거다
하지만 삽을 이용해 자루에 담아서 한번씩 크게크게 옮기면 속도가 엄청나게 빨라질거다
프로그래밍 버퍼도 비슷하다
하드디스크가 데이터 하나씩 cpu에게 전달하면 엄청나게 느리고 데이터가 다 올때까지의 시간은 엄청난 낭비가 될것이다
하지만 하드디스크와 cpu사이에 램이라는 장치를 두어서 하드디스크는 램에게 데이터를 계속 전달한다
그리고 그 램은 버퍼에 데이터를 쌓아두다가 버퍼가 어느정도 쌓이면 cpu는 버퍼의 데이터를 가져와서 한꺼번에 처리한다
이름에 버퍼가 있는것처럼 하나씩 전달하다 버퍼가 가득하면 보낸다
이 버퍼리더를 통해 파일을 읽거나 데이터를 입력할수도있다
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br2 = new BufferedReader(new FileReader("파일명"), 16*1024);
첫번째 코드는 InputStreamReader를 이용해서 System.in으로 인해 키보드에 들어오는 값을 입력받을수있다
또한 두번째는 파일경로를 입력해 파일의 내용을 가져올수있다. 뒤에 숫자는 버퍼의 크기를 나타낸다(기본값 8*1024)
read()와 readLine()을 이용해 내용을 읽을 수 있다
/* txt 내용
helloooo
안녕하세요
*/
System.out.println(br2.read()); //h
System.out.println(br2.readLine()); //helloooo
말 그대로 read()는 문자중에서 하나의 글자(char)만 읽어오고
readLine()은 한 문장(엔터키 치기 전까지의 문장)을 읽어온다
또한 버퍼리더의 출력은 무조건 String으로 나오기때문에 다른 타입으로 바꾸고싶으면
Integer.parseInt()같은 메서드를 활용해야한다