[Nodejs]O’REILLY 정리 - 7

1 minute read

Buffer

Buffer 클래스 역시 전역 개체로, Node에서 바이너리 데이터를 처리할 때 사용한다. 바이너리 데이터를 문자열로 변환하려면 setEncoding을 사용해서 스트림 소켓의 데이터 데이터 인코딩을 변경해야 한다. 새로운 버퍼는 다음과 같이 생성할 수 있다 :
var buf = new Buffer('string');
버퍼가 문자열을 가지고 있을 경우 선택적인 두 번째 매개변수로 인코딩을 전달할 수 있다. 사용 가능한 인코딩은 다음과 같다 :

  • ascii : 7비트 ASCII
  • utf8 : 유니코드 문자로 인코딩된 멀티바이트
  • ucs2 : 2바이트, 리틀 엔디안 인코딩 유니코드 문자
  • base64 : base64 인코딩
  • hex : 각 바이트를 16진수 문자로 인코딩

선택적으로 offset, length, encoding을 제공해서 기존 버퍼에 문자열을 쓰는 것도 가능하다 :
buf.write(string); //offset의 기본값은 0, length의 기본값은 buffer.length - offset, encoding은 utf8
소켓 간에 송신되는 데이터는 기본적으로 바이너리 포맷의 버퍼로 전송된다. 버퍼 대신 문자열을 보내고 싶으면 소켓에 직접 setEncoding을 호출하거나 소켓에 쓰는 함수 내의 인코딩을 지정하면 된다. 기본적으로 TCP(Transmission Control Protocol) socket.write 메서드는 두 번째 파라미터를 utf8로 설정하지만, TCP createServer 함수의 connectionListener 콜백에서 반환되는 소켓은 데이터를 문자열이 아닌 버퍼로 전송한다.

#참고

컴퓨터는 파일을 다음과 같이 두 가지 종류로 나누어서 다룬다.

1. 바이너리 파일(binary file)
2. 텍스트 파일(text file)

바이너리 파일은 데이터의 저장과 처리를 목적으로 0과 1의 이진 형식으로 인코딩된 파일을 가리킨다.
프로그램이 이 파일의 데이터를 읽거나 쓸 때는 데이터의 어떠한 변환도 일어나지 않는다.

텍스트 파일은 사람이 알아볼 수 있는 문자열로 이루어진 파일을 가리킨다.
프로그램이 이 파일의 데이터를 읽거나 쓸 때는 포맷 형식에 따라 데이터의 변환이 일어난다.

바이너리 데이터란 ?
엄밀하게는 모든 데이터 혹은 파일은 binary data이다. 모든 텍스트 파일은 바이너리 파일이지만, 모든 바이너리 파일이 텍스트 파일인 것은 아니다.
보통 파일 스트림에는 그 앞에 이 파일이 텍스트인지, 바이너리인지를 표시해주는 부분이 있는데, 이를 통해 컴퓨터는 해당 파일이 바이너리 인지 아닌지를 파악하고 그 다음 읽거나 출력하는 것을 진행한다.
텍스트가 아닌 이미자와 같은 다른 파일의 경우는 가급적 바이너리로 읽고 쓰는 것이 좋다.(사진이나 동영상 같은파일은 용량이 크기 때문에 바이너리 데이터를 사용하여 서버의 부담을 줄여줄 필요가 있다.)

Leave a comment