Protocol.strdecode = function(buffer) { console.log(buffer); var bytes = new ByteArray(buffer); var array = []; var offset = 0; var charCode = 0; var end = bytes.length; while(offset < end){ if(bytes[offset] < 128){ charCode = bytes[offset]; offset += 1; }else if(bytes[offset] < 224){ charCode = ((bytes[offset] & 0x3f)<<6) + (bytes[offset+1] & 0x3f); offset += 2; }else{ charCode = ((bytes[offset] & 0x0f)<<12) + ((bytes[offset+1] & 0x3f)<<6) + (bytes[offset+2] & 0x3f); offset += 3; } array.push(charCode); } var res = ''; var chunk = 8 * 1024; var i; for (i = 0; i < array.length / chunk; i++) { res += String.fromCharCode.apply(null, array.slice(i * chunk, (i + 1) * chunk)); } res += String.fromCharCode.apply(null, array.slice(i * chunk)); console.log('protocol strdecode' + res); return res; };
时间: 2024-04-27 20:23:08 浏览: 17
这段代码是用于将一个字节流转换为字符串的函数。它将输入的字节流转换为一个整数数组,然后将整数数组分块,每块大小为8KB,依次将每块中的整数转换为对应的Unicode字符,最终将所有的字符拼接成一个字符串并返回。在转换整数数组时,它采用了UTF-8编码的方式,根据UTF-8的规则来解析字节流中的每个字节,将其转换为对应的Unicode编码。
相关问题
JS Package.decode = function(buffer){ var bytes = new ByteArray(buffer); var type = bytes[0]; var index = 1; var length = ((bytes[index++]) << 16 | (bytes[index++]) << 8 | bytes[index++]) >>> 0; var body = length ? new ByteArray(length) : null; copyArray(body, 0, bytes, PKG_HEAD_BYTES, length); console.log('package decode' +type + body); return {'type': type, 'body': body}; };
这段代码是一个 JavaScript 函数,它的作用是将传入的二进制数据 buffer 解码为一个对象,包含两个属性:type 和 body。其中,type 是 buffer 中的第一个字节,body 是从 buffer 中读取的数据。
具体实现中,函数首先将 buffer 转换为一个 ByteArray 对象,然后从中读取 type 和 length。length 是从 buffer 的第 2 到第 4 个字节中读取的,它表示 body 的长度。接着,函数根据 length 创建一个新的 ByteArray 对象 body,然后将 buffer 中的数据从第 PKG_HEAD_BYTES 个字节开始复制到 body 中。
最后,函数将 type 和 body 封装成一个对象并返回。在函数的实现中,还打印了一个日志,包含 type 和 body 的值。
String str2=new String(bytearray)是构造方法吗
是的,`String(byte[])`是Java中的构造方法。它的作用是使用指定的字节数组构造一个新的String对象。在这个构造方法中,字节数组中的每个字节都被视为一个字符,然后将它们连接起来形成一个新的字符串。需要注意的是,该构造方法使用的是平台默认的字符集。如果要使用其他字符集,可以使用`String(byte[], Charset)`构造方法。