JSBinding+Bridge:逻辑代码中操作二进制数据
以这2个函数为例
class File
{
public static byte[] ReadAllBytes(string path);
public static void WriteAllBytes(string path, byte[] data);
}
如果不做特殊处理,ReadAllBytes在返回数据给Js时,是一个字节一个字节拷贝给Js的数组。这样性能是极差的。并且,大多数情况下,逻辑代码中不需要直接修改2进制数据,而只是拿着而已。
因此,不要直接使用上面的2个函数。
以下是一个可选方案。
1. 首先在框架代码中实现一个 byte[] 的包装类:
public class ByteArray
{
public ByteArray(int length = 0)
{
bytes = new byte[length];
}
public ByteArray(byte[] bytes_)
{
bytes = bytes_;
} public byte[] bytes;
public int Length
{
get
{
return bytes != null ? bytes.Length : 0;
}
}
public static void Copy(ByteArray src, ByteArray dst, int len)
{
Array.Copy(src.bytes, dst.bytes, len);
}
public static void Copy(ByteArray src, int spos, ByteArray dst, int dpos, int len)
{
Array.Copy(src.bytes, spos, dst.bytes, dpos, len);
}
}
2. 把 ByteArray 填写到 JSBindingSettings.classes 数组里导出
3. 针对带 byte[] 参数,以及返回值为 byte[] 的函数,手写出另一个版本,把 byte[] 都改为 ByteArray ,例如上面的2个函数手写后,变成:
class FileEx // 类名改一下
{
public static ByteArray ReadAllBytes(string path)
{
byte[] data = File.ReadAllBytes(path);
return new ByteArray(){bytes = data};
}
public static void WriteAllBytes(string path, ByteArray byteArray)
{
File.WriteAllBytes(path, byteArray.bytes);
}
}
4. 把 FileEx 填写到 JSBindingSettings.classes 数组里导出
5. 在逻辑代码中,涉及到 byte[] 的,一律使用 ByteArray 的版本。例如,下面的代码读出一个文件的2进制数据,再写到另一个文件中去(逻辑代码对byte[]的使用就是典型的中转作用而已)
ByteArray data = FileEx.ReadAllBytes("D:/1.png");
FileEx.WriteAllBytes("D:/2.png", data);
返回:JSBinding+Bridge.NET:Unity游戏热更新方案
JSBinding+Bridge:逻辑代码中操作二进制数据的更多相关文章
- 认识Js中的二进制数据
Blob 在项目中涉及到要对html原生的audio组件进行样式复写,因此需要重新实现audio的一些功能,比如下载.实现一个下载大致的思路是服务端返回一段音频的二进制数据,客户端将其存放在Blob中 ...
- 在spark中操作mysql数据 ---- spark学习之七
使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...
- Java JDBC 操作二进制数据、日期时间
二进制数据 mysql提供了四种类型来存储二进制数据: TinyBlob 最多可存储255字节 Blob 最多可存储65KB MediumBlob 最多可存储16MB LongBlob ...
- Android(java)学习笔记208:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- Android(java)学习笔记151:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream
任务要将数据文件geo.txt加载进行.因为是别人写的总体项目,不能乱动位置.只能将geo.txt打包到jar中某目录.比如,放到.class文件下怎么加载:http://riddickbryant. ...
- python struct.pack() 二进制文件,文件中打包二进制数据的存储与解析
学习Python的过程中,遇到一个问题,在<Python学习手册>(也就是<learning python>)中,元组.文件及其他章节里,关于处理二进制文件里,有这么一段代码的 ...
- python中操作excel数据
python操作excel,python有提供库 本文介绍openpyxl,他只支持新型的excell( xlsx)格式,读取速度还可以 1.安装 pip install openpyxl 2.使用 ...
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
随机推荐
- phpcms(1)phpcms V9 MVC模式 与 URL访问解析(转)
[1]URL访问解析 观察访问网页时的网址,可以得出模块访问方法,如下示例: http://www.abcd.com.cn/phpcms/index.php?m=content&c=index ...
- MVC中Area的使用
1.Area是什么? MVC 2 中引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Contr ...
- CentOS使用ufw的方法
ufwはファイアウォールの管理ツールで.Ubuntuで標準的に使われています.ufw allow 80/tcp のような簡単なコマンドでポートを開け閉めできます. CentOS用のパッケージは用意され ...
- 定位 - CoreLocation - INTULocationManager
https://github.com/intuit/LocationManager #import "ViewController.h" #import "INTULoc ...
- JavaScript 语言基础知识点总结
网上找到的一份JavaScript 语言基础知识点总结,还不错,挺全面的. (来自:http://t.cn/zjbXMmi @刘巍峰 分享 )
- MySQL 5.6 root密码丢失
windows下mysql密码忘记了 第一步:netstat -nat(可以查看mysql是否启动了,如果启动了,可以用输入net stop mysql(或者通过任务管理器结束进程)) 第二步:my ...
- [LeetCode] Burst Balloons (Medium)
Burst Balloons (Medium) 这题没有做出来. 自己的思路停留在暴力的解法, 时间复杂度很高: 初始化maxCount = 0. 对于当前长度为k的数组nums, 从0到k - 1逐 ...
- perl use base 继承
centos6.5:/root/podinns/lib#cat First.pm package First; use base qw(Second); sub new { my $self = {} ...
- Apache / PHP 5.x Remote Code Execution Exploit
测试方法: 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! /* Apache Magica by Kingcope */ /* gcc apache-magika.c -o ...
- Linux实时将所有输出重定向到文件
Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...