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解析器 ...
随机推荐
- Uploadify 上传失败
更改Apache的php.ini的配置 In my php.ini (created custom ini file in public_html) would this solve this pro ...
- Android自定义图片加载框架
大神原网址: http://blog.csdn.net/lmj623565791/article/details/41874561 思路: 1. 压缩图片 压缩本地图片: 获得imageview想要 ...
- Hibernate过程小计
对实体 "XXX" 的引用必须以 ';' 分隔符结尾(需要对分号进行编码) <property name="connection.url">jdbc ...
- Aspose.Cells 导入导出EXCEL(转)
Aspose.Cells 导入导出EXCEL 修改样式 Workbook workbook = new Workbook(); //工作簿 Worksheet ...
- ACM俱乐部算法基础练习赛(1)
A: 水题 代码: #include<cstdio> #include<algorithm> using namespace std; ]; int n,m,c; int ma ...
- easyui datagrid单击单元格选择此列
示例代码实现单击jquery easyui datagrid的单元格时,取消datagrid默认选中高亮此行的样式,改为选中单击的单元格所在的列,高亮此列上的所有单元格.可以配置全局single变量, ...
- Oracle core06_latch&lock
lock and latch 在oracle中为了保护共享资源,使用了两种不同的锁机制lock和latch,这两种锁有明显不同点: 1,lock和pin,采用的是队列的方式,先来先服务的策略,latc ...
- 尚未在 Web 服务器上注册 ASP.NET 4.0” 的解决办法
http://www.sowsoy.com/topics-537.html win7,vs2010创建.NetFramework 4框架下的Asp.Net空网站.系统提示 “尚未在 Web 服务器上注 ...
- 将eclipse新建项目的默认编码GBK改为UTF-8
在eclipse下: 新建项目默认编码设置:Window->Preferences->General->Workspace->Text file encoding 将其改为UF ...
- (转载)JavaScript中的Window窗口对象
(转载)http://www.ijavascript.cn/jiaocheng/javascript-window-65.html 例子: <html> <head> < ...