/** * ByteBuffer.js * 1,字节流基本类型封装 * 2,long,int64类型实现 * 3,utf8编码实现 * * 字节流打包: * var buffer=new ByteBuffer(128); * buffer.writeString("test string"); * buffer.writeHex(0x04); * buffer.writeChar("|"); * buffer.writeUint32(1000); buffer.writeInt64(-14725836936900); socket.send(buffer.buffer,buffer.offset); 字节流解包: var len=socket.read(data); var buffer=new ByteBuffer(len); buffer.setBufferData(data); * var str=buffer.readString(); * var int32=buffer.readInt32(); * .... */ var ByteBuffer = function(length) { this.buffer = new ArrayBuffer(length); // this.byteStream=new Uint8Array(this.buffer); this.dataView = new DataView(this.buffer); // 缓冲区偏移量 this.offset = 0; this.setBufferData = function(buffer) { this.buffer = buffer; this.dataView = new DataView(this.buffer); this.offset = 0; return this.dataView; } // copy buffer to another // buffer,m.appendArrayBuffer(m.offset+2,n.buffer,0,5); this.appendArrayBuffer = function(toPos, fromBuffer, fromPos, length) { // console.log("appendArrayBuffer toPos=%d,fromPos=%d,length=%d // \n",toPos,fromPos,length); var uarr = new Uint8Array(fromBuffer); for (var i = fromPos; i < length; i++) { this.dataView.setInt8(toPos++, uarr[i], true); } } // 将uarr复制到当前缓冲区 this.appendUint8Array = function(toPos, uarr) { for (var i = 0; i < uarr.length; i++) { this.dataView.setInt8(toPos++, uarr[i], true); } } this.initHeader = function() { this.offset += 9; } this.setHeader = function(input) { this.dataView.setInt8(0, 0x7c, true); this.dataView.setUint32(1, input, true); this.dataView.setUint32(5, input - 5, true); } // writeChar("a") this.writeChar = function(input) { this.dataView.setInt8(this.offset++, input.charCodeAt(), true); return this.offset; } // writeHex(0x04); this.writeHex = function(input) {