Javascript字节流封状类

/**
 * 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) {
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值