zoukankan      html  css  js  c++  java
  • 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游戏热更新方案

  • 相关阅读:
    洪小瑶学iOS-UINavigationController
    flash模拟苹果菜单原理
    洪小瑶学iOS-NSNotificationCenter 详解
    关于体感互动Airkinect研究《案例篇1》
    AS3 兩點求距離
    右鍵點擊Right Click (Flash Player 11.2 新功能)
    像素级碰撞检测研究
    关于体感互动kinect研究《基础篇》
    部署Pentaho BI服务器到独立Tomcat所碰到的问题总结
    c语言的一个技巧问题
  • 原文地址:https://www.cnblogs.com/answerwinner/p/6262606.html
Copyright © 2011-2022 走看看