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游戏热更新方案

  • 相关阅读:
    9.1 一周学习总结
    EasyUI(添加购物车小demo)
    助你了解react的小demo
    PHP(一)OOP基础
    继承的三种方式
    jQuery基础应用
    刘强1109 JavaScript基础二(分支与循环结构)
    JavaScript基础一(js基础函数与运算符)
    移动开发与响应式
    css基础语法三
  • 原文地址:https://www.cnblogs.com/answerwinner/p/6262606.html
Copyright © 2011-2022 走看看