关于javascript前端开发之实现二进制读写操作的相关介绍,请看以下内容详解,本文介绍的非常详细,具有参考价值。
由于种种原因,在浏览器中无法像nodejs那样操作二进制。
最近写了一个在浏览器端操作读写二进制的帮助类
!function (entrance) {
"use strict";
if ("object" === typeof exports && "undefined" !== typeof module) {
module.exports = entrance();
} else if ("function" === typeof define && define.amd) {
define([], entrance());
} else {
var f;
if ("undefined" !== typeof window) {
f = window;
} else {
throw new Error('wrong execution environment');
}
f.TinyStream = entrance();
}
}(function () {
var binaryPot = {
/**
* 初始化字节流,把-128至128的区间改为0-256的区间.便于计算
* @param {Array} array 字节流数组
* @return {Array} 转化好的字节流数组
*/
init: function (array) {
for (var i = 0; i < array.length; i++) {
array[i] *= 1;
if (array[i] < 0) {
array[i] += 256
}
if(array[i]>255){
throw new Error('不合法字节流')
}
}
return array;
},
/**
* 把一段字符串按照utf8编码写到缓冲区中
* @param {String} str 将要写入缓冲区的字符串
* @param {Boolean} isGetBytes 是否只得到内容字节(不包括最开始的两位占位字节)
* @returns {Array} 字节流
*/
writeUTF: function (str, isGetBytes) {
var back = [],
byteSize = 0;
for (var i = 0; i < str.length; i++) {
var code = str.charCodeAt(i);
if (code >= 0 && code <= 127) {
byteSize += 1;
back.push(code);
} else if (code >= 128 && code <= 2047) {
byteSize += 2;
back.push((192 | (31 & (code >> 6))));
back.push((128 | (63 & code)))
} else if (code >= 2048 && code <= 65535) {
byteSize += 3;