js发送和接收二进制字节流数据

    发送二进制数据
var oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.onload = function (oEvent) {
          
   
// Uploaded.
};
var blob = new Blob([abc123], {
          
   type: text/plain});
oReq.send(blob);

或者

var myArray = new ArrayBuffer(512);
var longInt8View = new Uint8Array(myArray);
for (var i=0; i< longInt8View.length; i++) {
          
   
longInt8View[i] = i % 255;
}
var xhr = new XMLHttpRequest;
xhr.open("POST", url, false);
xhr.send(myArray);
    接收二进制数据
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
          
   
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
          
   
var byteArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteArray.byteLength; i++) {
          
   
}
}
};
oReq.send(null);

如上设置只能是文本类型,如果是Blob类型:

var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) {
          
   
var blob = new Blob([oReq.response], {
          
   type: "image/png"});
// ...
};
oReq.send();

或者

var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "blob";
oReq.onload = function(oEvent) {
          
   
var blob = oReq.response;
// ...
};
oReq.send();

旧版本的浏览器:

function load_binary_resource(url) {
          
   
var req = new XMLHttpRequest();
req.open(GET, url, false);
//XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
req.overrideMimeType(text/plain; charset=x-user-defined);
req.send(null);
if (req.status != 200) return ;
return req.responseText;
}

以上参考

ArrayBuffer和TypedArray,以及Blob的使用
var ab = new ArrayBuffer(32)
var iA = new Int8Array(ab)
iA[0] = 97;//把二进制的数据的首位改为97 ,97为小写字母a的ascll码;
var blob = new Blob([iA], {
          
   type: "application/octet-binary"});//把二进制的码转化为blob类型
var url = URL.createObjectURL(blob);
window.open(url)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input type="file" id="f">
    <script>
        var eF = document.getElementById("f");
        eF.onchange = function() {
          
   
            var file = eF.files[0];
            console.log(file instanceof Blob)
        }
    </script>
</body>
</html>

FileReader读区blob文件

var ab = new ArrayBuffer(32)
var iA = new Int8Array(ab)
iA[0] = 97
var blob = new Blob([iA], {
          
   type: "application/octet-binary"});
var fr = new FileReader();
fr.addEventListener("load", function(ev) {
          
   
    console.log(ev.target.result);//会输出字符:a
});
fr.readAsText(blob)

blob转化为typedArray 如果要把blob文件转化为二进制的数据的话,要先把blob转化为arraybuffer,然后再使用typedArray就可以直接编辑二进制数据

var ab = new ArrayBuffer(32)
var iA = new Int8Array(ab)
iA[0] = 97
var blob = new Blob([iA], {
          
   type: "application/octet-binary"});
var fr = new FileReader();
fr.addEventListener("load", function(ev) {
          
   
    var abb = ev.target.result;
    var iAA = new Int8Array(abb);
    console.log(iAA);
});
//把blob文件转化为arraybuffer;
fr.readAsArrayBuffer(blob)

以上参考

推荐文章 :

经验分享 程序员 微信小程序 职场和发展