所有分类
  • 所有分类
  • 后端开发
前端大佬分享:JavaScript 玩转二进制数据的那些事儿

前端大佬分享:JavaScript 玩转二进制数据的那些事儿

这次给大家带来js怎样直接操作二进制数据,js直接操作二进制数据的注意事项有哪些,下面就是实战案例,一起来看一下。接着定义socket打开,连接之后执行的函数:下面是接收数据处理:

身为前端大佬,总得处理各式各样的数据格式,尤其是二进制这块儿。今儿就来聊聊我用JavaScript玩转二进制数据的那些事儿,希望能帮到你们!

理解二进制数据的重要性

var socket=new WebSocket("ws://192.168.0.147");

现在,做网页开发的时候碰到二进制数据的情况特别多。比如接收WebSocket传来的信息,或者处理照片和文档这些东西,懂得怎么玩转二进制数据就显得很重要了。毕竟,能把这活玩得利索,应用运行起来快,用户也高兴不是?

创建和配置WebSocket

用WebSocket聊天,第一步就是创建WebSocket对象。重要的一步是给它设定个`binaryType`参数,用来指定从WebSocket接收的二进制信息要怎么处理。一般来说,咱们就选那个叫`”arraybuffer”`的,这样在保证速度快的同时也能有更多选择。

使用ArrayBuffer和DataView操作数据

在JavaScript里面,你可能会遇到ArrayBuffer这种东西,它就是个能装固定大小二进制原始数据的大容器。要是想仔细摆弄这个缓冲区里的数据怎么办?这时候就要用上DataView。它就像个小助手,让你按自己喜欢的顺序存取和修改缓冲区里的数据,尤其适合处理网络上那些乱七八糟的信息。

socket.onopen=function(){
 //发送登录帧,4-20位为手机号
 var loginArr=[0X02,0X02,0X00,0X1E,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0D,0X0A]        
}

发送二进制数据

咱们平时发信息就是先把内存弄出来,DataView就是用来填充这个地方的。用它就像点菜下单一样,比如”setUint8″或者”setInt16″,就能准确无误地把数据塞进内存里了。

前端大佬分享:JavaScript 玩转二进制数据的那些事儿

接收和处理二进制数据

var loginBuffer=new ArrayBuffer(30);
var loginDataview=new DataView(loginBuffer);
//localstorageuserinfo为缓存在本地的用户手机号
var telArr=localstorageuserinfo.TelPhone; 
var loginTime=tempTrans();
for(var i=0;i3&&i19&&i=0;i--){
  uint8.push(u32Dataview.getUint8(i))
 }
 uint8.push(new DataView(new Uint8Array([time.getMonth()+1]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getDate()]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getHours()]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getMinutes()]).buffer).getUint8(0));
 uint8.push(new DataView(new Uint8Array([time.getSeconds()]).buffer).getUint8(0));
 return uint8;
}

要接收二进制数据得先设置好WebSocket里的`binaryType`,这样收到的数据才能变成我们熟悉的JavaScript对象。如果选了`”arraybuffer”`的话,就得用DataView来读数据,这样就能按照需求把数据按各种格式和顺序解析出来。

错误处理和调试技巧

遇到那些二进制数据里的错综复杂问题,比如字节顺序乱七八糟,再或者数据格式对不上号,那得有一套自己的调试秘籍才行!就像用浏览器的开发工具监控一下网页的网络请求和回应,或者用断点慢慢追踪代码的运行过程,这些都是很实用的小技巧。

性能优化和最佳实践

要让应用跑得更快,关键是搞定二进制数据那点儿事:选好缓冲区大小,把数据读写弄流畅点,少做那些没用的内存复制。还有,别忘了遵守一些小窍门,比如尽量少转几次数据,这样也能大大提速!

结合实际案例的学习

搞明白道理还得干活儿才行!所以我准备举几个例子来说说怎么把这些知老活用到实操里面去。通过编代码和调毛病,咱们才能更透彻地了解到怎么处理二进制数据。

//接收消息onmessage
socket.onmessage=function(data){
  var blob_=new Blob([data.data]);
  parseBlob(blob_);
 }
//使用fileReader操作blob对象
var reader = { 
 readAs: function(type,blob,cb){
  var r = new FileReader();
  r.onloadend = function(){
    if(typeof(cb) === 'function') {
    cb.call(r,r.result);
    }
  }
  try{
    r['readAs'+type](blob);
  }catch(e){}
  }
}
function parseBlob(blob){
 reader.readAs('ArrayBuffer',blob.slice(0,blob.size),function(arr){
   var dataview_=new DataView(arr);
   //协议中第二位是判断数据来源的
   var socketConType=dataview_.getUint8(1);
   //转成字符串读取数据
   var modulelength=(dataview_.buffer.byteLength-46)/33;
   var modulestate={};
    reader.readAs('Text',blob.slice(i*33+37,i*33+37+32),function(result){
    modulestate[dataview_.getUint8(i*33+36)]=result;
   });
 })
}

看了这篇文章后,你应该能搞懂JavaScript怎么处理二进制数据了。这个技能在平常处理数据时非常实用,而且还能帮你提高技术水平。那么,你在自己的项目中有遇到过处理二进制数据的情况吗?快来评论区分享下你的经历和疑惑,咱们一起探讨学习!觉得这篇文章有用的话就点个赞分享出去,让更多的朋友受益。

原文链接:https://www.icz.com/technicalinformation/web/2024/06/17081.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?