Buffer

node.js에 Buffer라는 놈이 있어 사용 해봤습니다.

Java에 있는 ByteBuffer와 비슷한 역할을 하더군요.

바이트 파싱하기에 편리하게 만들어져 있습니다.


빅엔디안, 리틀엔디안 방식을 처리할수있게 되어있어 삽질을 안해도 되고,

Buffer.slice()라는 걸로 원하는 위치에 있는 바이트를 원하는 개수 만큼 가져올 수 있게 되어 있어 편리하네요.


샘플 예제는 4바이트를 가지고 byte, short, int값을 정수형으로 찍어 봤습니다.


샘플 소스

var buf = new Buffer(4);

buf[0] = 0x0;
buf[1] = 0x1;
buf[2] = 0x2;
buf[3] = 0x3;

for (var i = 0; i < buf.length; i++) {
  console.log(buf.readInt8(i));
}

// short
console.log("\n-------------------------");
console.log(buf.slice(0, 2));
console.log("LE : " + buf.readInt16LE(0)); // 0x01 0x00
console.log("BE : " + buf.readInt16BE(0)); // 0x00 0x01

console.log("\n-------------------------");
console.log(buf.slice(2, 4));
console.log("LE : " + buf.readInt16LE(2)); // 0x03 0x02
console.log("BE : " + buf.readInt16BE(2)); // 0x02 0x03

// int
console.log("\n-------------------------");
console.log(buf);
console.log("LE : " + buf.readInt32LE(0)); // 0x03 0x02 0x01 0x00 
console.log("BE : " + buf.readInt32BE(0)); // 0x00 0x01 0x02 0x03 


실행 결과

node_buffer.PNG


LE는 리틀엔디안, BE는 빅엔디안 입니다.


node.js의 Buffer을 사용하면 바이너리 패킷 파싱하는데에는 별문제가 없을 것 같습니다.



감사합니다.