当前位置: 首页 > news >正文

AutoX.js向后端传输二进制数据

android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制,不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组,但是实际上应该还没有支持。AutoX.js的http也是这样,但是AutoX.js还支持Websocket,它的websocket模块,采用okhttp3 实现,模块中包含了okhttp3 核心所有的类,而okhttp3支持发送String和ByteString,而后者则是我心心念念的二进制数据传输功能。
为什么我纠结于直接传输二进制数据,直接传文件或者将数据base64编码传到后端不简单么?其实主要是效率考虑,比如我使用截图,在内存中可以得到image的字节数组,如果传文件,还得把image写入本地硬盘,然后发送出去,又得读一遍本地硬盘,不是浪费了这两次IO么?当然系统会带IO缓存,耗时不一定会大。而转base64则编码效率比二进制至少低1/4(相当于8bit的数据只能编码成6bit的数据),所以,我还是希望能支持直接把二进制数据传到后端为好。
兴奋之余遇到一个问题,ByteString是okhttp3的websocket发送支持的数据类型,不是AutoX.js默认支持的数据类型,要把image的字节数组转成ByteString得依赖于okio这个外部库里的ByteString这个类的方法。

var img = captureScreen();
var clip=images.clip(img, 400, 400, 400, 400);
var ba=images.toBytes(clip,format = "png", quality = 100)
clip.recycle();importPackage(Packages["okhttp3"]); //导入包
let ByteString = Packages.okio.ByteString;var client = new OkHttpClient.Builder().retryOnConnectionFailure(true).build();
var request = new Request.Builder().url("ws://192.168.137.1:8080").build(); 
client.dispatcher().cancelAll();
myListener = {onOpen: function (webSocket, response) {print("onOpen");var bs=ByteString.of(ba);webSocket.send(bs);},onMessage: function (webSocket, msg) { print("msg");print(msg);},onClosing: function (webSocket, code, response) {print("正在关闭");},onClosed: function (webSocket, code, response) {print("已关闭");},onFailure: function (webSocket, t, response) {print("错误");print( t);}
}var webSocket= client.newWebSocket(request, new WebSocketListener(myListener)); 
setInterval(() => { // 防止主线程退出   
}, 1000);

websocket服务端是这样的:

const WebSocket = require('ws');
const fs=require('fs')const wss = new WebSocket.Server({ port: 8080 });wss.on('connection', function connection(ws) {ws.on('message', function incoming(message) {console.log("收到消息:");console.log(message.length)fs.writeFile('fromautox.png', message, 'utf8', err => {if (err) console.log('file system', err);else console.log('done');
});});ws.send('something');
});

这样就完成了前端抓图直接传到后端保存图片的流程
此前还担心ByteString这种数据类型需要okhttp的websocketlistener来解析处理,由于okhttp只有websocket客户端,还不支持websocket服务器,所以还需要一个websocket服务器来转发请求到另一个websocket客户端来用websocketlistener来处理收到的ByteString数据,当然也能正常工作,不过实验证明是不需要的了。

相关文章:

AutoX.js向后端传输二进制数据

android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制,不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组,但是实际上应该还没有支持。AutoX.js的http也是这样,但是AutoX.js还支持…...

lvgl学习笔记--基础对象1

【LVGL学习笔记】(三)控件使用_学习_煜个头头-GitCode 开源社区 LVGL 基础对象|极客笔记 #include "../../../lv_examples.h"void lv_ex_obj_1(void) {lv_obj_t * obj1;obj1 lv_obj_create(lv_scr_act(), NULL);lv_obj_set_size(obj1, 100, …...

TDengine 在业务落地与架构改造中的应用实践!

前言 在物联网和大数据时代,时序数据的管理和分析变得至关重要。TDengine,作为一款专为时序数据设计的开源数据库,以其卓越的存储和查询效率,成为众多企业优化数据架构的优选。本文将分享我将TDengine成功应用于实际业务的经验&am…...

Python3爬虫教程-HTTP基本原理

HTTP基本原理 1,URL组成部分详解2,HTTP和HTTPS3,HTTP请求过程4,请求(Request)请求方法(Request Method)请求的网址(Request URL)请求头(Request H…...

竹云赋能“中国·贵州”全省统一移动应用平台建设,打造政务服务“新引擎”

近日,2024中国国际大数据产业博览会在贵州贵阳圆满落幕。会上,由贵州省政府办公厅牵头建设的“中国贵州”全省统一移动应用平台正式发布,聚焦民生办事、政务公开、政民互动、扁平高效、数据赋能五大模块,旨在打造公平普惠的服务平…...

【MySQL 04】数据类型

目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介: 6.2.enum和set的一般使用方法 6.3.用数字的方式…...

夹耳式蓝牙耳机哪个牌子最好,教你如何不踩雷

近年来,夹耳式耳机备受众人喜爱。主要原因在于其不入耳的特性,既能保护听力健康,又能让人享受到极致的音乐体验。久而久之,人们对入耳式耳机反而感到不习惯了。然而,一些想要入手夹耳式耳机的小伙伴却犯了难&#xff0…...

亿发零售云解析:新零售破局与年轻群体消费趋势变化

近年来,随着数字化、智能化的快速发展,“新零售”概念逐渐成为商业领域的热门话题。相比传统零售,新零售通过线上与线下的深度融合,利用大数据、人工智能等技术,赋能消费者与品牌之间的互动。尤其在年轻消费群体中&…...

zabbix“专家坐诊”第257期问答

问题一 Q:zabbix5.0监控项里的键值,怎么设置变量值?{#ABC} {$ABC} 都识别不到变量。 A:可以参考一下这个。 问题二 Q:我想问一下用odbc创建监控项,生成了json格式,如何创建一个触发器去判断里面…...

【代码笔记】

1级 第一课——cout /* C01.L01.程序的基本结构、cout语句 杨彦彬 2024.9.23日作业 &#xff08;2024.9.23做&#xff09; */ //调用头文件 #include<bits/stdc.h> //使用标准名字空间 using namespace std; //代码主体 int main(){//输出数字cout<<25;cout<&…...

CentOS上使用Mosquitto实现Mqtt主题消息发布和订阅mqtt主题消息连同时间戳记录到文件

场景 CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载&#xff1a; CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载-CSDN博客 上面介绍了mosquitto的离线安装。 如果业务场景中需要订阅某mqtt主题的消息并将收到消息的时间以…...

COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件

COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件 主要功能介绍 支持 IEEE Std C37.111-1991/1999/2013 规范。读取 ASCII 或二进制 COMTRADE 文件。查看来自 COMTRADE 配置文件的模拟和数字通道列表。将图表导出为 SVG、BMP、JPEG 和 PNG 图形格式。将显示的观察结果以 C…...

【面试宝典】面试基础指导

目录 &#x1f354; 简历怎么写 &#x1f354; ⾯试前针对项⽬撰写完成项⽬⽂档 &#x1f354; ⾯试前 &#x1f354; ⾯试中 4.1 投递简历当天没有收到⾯试邀约 4.2 讲解项⽬ 4.3 讲解知识 4.4 ⾯试中关于技术选型的演变 &#x1f354; ⾯试后 &#x1f354; 小结 &…...

Linux·权限与工具-git与gdb

1. git工具 git是一款软件&#xff0c;发明它的人同时发明了Linux操作系统&#xff0c;也就是大名鼎鼎的Linus Torvalds 林纳斯托瓦兹。后来人们把git软件包装&#xff0c;产生了github、gitee等平台。 git产生的初衷就是便于进行多人协同管理&#xff0c;同时它还可以用来将本…...

unity 如何 团队协作避免文件冲突?

在Unity团队协作中&#xff0c;避免文件冲突的关键在于版本控制、场景和Prefab的管理、以及沟通。以下是具体方法&#xff1a; 1. 使用版本控制系统 (VCS) Unity支持多个版本控制系统&#xff0c;如Git和Perforce。通过版本控制&#xff0c;每位团队成员可以独立工作&…...

VOC2007 的ImageSets/Main目录下通常有四个文件test.txt val.txt train.txt trainval.txt

在 VOC2007 的ImageSets/Main目录下通常有四个文件&#xff1a; test.txt&#xff1a;这个文件列出了用于测试的图像文件名。这些图像将在评估模型性能等测试阶段被使用。train.txt&#xff1a;此文件包含用于训练的图像文件名。在模型的训练过程中&#xff0c;程序会读取这些图…...

JavaScript中的parseInt(), Number(),+有啥区别?

文章目录 parseInt()Number()一元加号 处理 NaN 的常见方法1. 使用 isNaN() 函数检查值2. 使用 Number.isNaN() 方法3. 提供默认值4. 使用 try...catch 结构5. 使用类型守卫 在JavaScript中&#xff0c;parseInt(), Number(), 和一元加号 都可以用来转换值到数字类型&#xff…...

java核心基础

文章目录 1. Java开发基础1.1 DOS常用命令:&#xff08;以MAC常用命令比较&#xff09;1.2 JVM、JRE、JDK之间的关系1.3 Java开发环境的搭建1.4 Java的注释&#xff0c;标识符、标识符的命名规范1.5 变量和常量的定义及初始化1.6 Java的运算符1.7 三大语句1.8 常用的类1.8.1 ja…...

java 字符串如何通过占位符替换字符串

在Java中&#xff0c;可以使用String.format()方法或者MessageFormat.format()方法来通过占位符替换字符串。 例子1&#xff1a;使用String.format()方法 String str "Hello, %s! Today is %s."; String result String.format(str, "Alice", "Sun…...

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 LMS全称为Lite Memory Sanitizer&#xff0c;是一种实时…...

Flowable 6.7.2 适配达梦数据库踩坑实录:从驱动到Liquibase源码修改全攻略

Flowable 6.7.2 深度适配达梦数据库实战指南&#xff1a;从驱动配置到源码级改造 在国产化替代浪潮中&#xff0c;数据库迁移往往是技术团队面临的首要挑战。当工作流引擎Flowable遇上国产数据库达梦(DM)&#xff0c;两者的"语言不通"会导致一系列兼容性问题。本文将…...

无王无帝定乾坤,来自田间第一人 凰标为律正人心

无王无帝定乾坤&#xff0c;来自田间第一人。 世间最大的乱象&#xff0c;从来不止山河动荡、世道纷争&#xff0c;更是人心失序、良知蒙尘。一、旧世千年&#xff1a;王权为纲&#xff0c;律法为束旧制之弊具体表现规则来源由权贵制定&#xff0c;标准随权势偏移治理逻辑重压制…...

信步SV3b-19016EP嵌入式主板深度解析:从选型到实战应用

1. 项目概述&#xff1a;为什么是SV3b-19016EP&#xff1f;在嵌入式系统开发这个行当里&#xff0c;选型永远是项目成败的第一步。最近几年&#xff0c;随着边缘计算、工业自动化、智能零售这些场景的爆发&#xff0c;大家对嵌入式主板的性能、接口丰富度和可靠性要求越来越高。…...

Avogadro 2:解决跨平台化学建模可视化挑战的开源方案

Avogadro 2&#xff1a;解决跨平台化学建模可视化挑战的开源方案 【免费下载链接】avogadroapp Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, and related…...

如何用LyricsX在Mac桌面显示歌词:免费开源工具终极指南

如何用LyricsX在Mac桌面显示歌词&#xff1a;免费开源工具终极指南 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否曾在听歌时想要跟着歌词一起唱&#xff0c;却不…...

微积分入门书籍之国内篇

超轻松的漫画微积分&#xff1a;如何追上那只乌龟&#xff08;2023&#xff09; 大科学家讲科学&#xff1a;画中漫游微积分(2017.08) 超喜欢的趣味数学书—有趣的数学园地&#xff08;数学教育家刘薰宇为中学生量身打造“趣味数学”科普读物&#xff01;&#xff09;-2021.06 …...

LizzieYzy:围棋AI分析工具的三大突破,让你拥有职业棋手的复盘能力

LizzieYzy&#xff1a;围棋AI分析工具的三大突破&#xff0c;让你拥有职业棋手的复盘能力 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 还记得上次输掉一盘棋后&#xff0c;你花了多少时间复盘寻…...

taotoken的token plan套餐为团队开发带来的成本可控体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken 的 Token Plan 套餐为团队开发带来的成本可控体验 在团队开发环境中&#xff0c;频繁调用大模型 API 已成为提升研发效率…...

前端开发自救指南:不用写测试代码,5分钟用Playwright录制生成E2E测试脚本

前端开发自救指南&#xff1a;5分钟零代码生成E2E测试脚本的Playwright实战 最近在重构公司后台管理系统时&#xff0c;我遇到了一个典型的前端开发困境&#xff1a;每次修改表单验证逻辑后&#xff0c;都需要手动点击十几个字段组合来验证是否会影响其他功能。直到团队里的测…...

思源宋体TTF字体包:为什么专业设计师都选择它?7大应用场景深度解析

思源宋体TTF字体包&#xff1a;为什么专业设计师都选择它&#xff1f;7大应用场景深度解析 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版烦恼吗&#xff1f;字体选择困…...