首页 > 代码库 > JSBinding+Bridge:逻辑代码中操作二进制数据
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 =http://www.mamicode.com/ 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 = http://www.mamicode.com/FileEx.ReadAllBytes("D:/1.png"); FileEx.WriteAllBytes("D:/2.png", data);
返回:JSBinding+Bridge.NET:Unity游戏热更新方案
JSBinding+Bridge:逻辑代码中操作二进制数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。