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

  • 相关阅读:
    Android studio中Rendering Problems不能可视化操作的解决办法
    java实现最基础的socket网络通信
    java入门
    Android开发环境的搭建
    python学习笔记之初识Python
    用例图
    经典算法学习之回溯法
    结构化分析和方法
    经典算法学习之分治法(以排列、组合程序为例)
    day22_1-课前上节复习+os模块
  • 原文地址:https://www.cnblogs.com/answerwinner/p/6262606.html
Copyright © 2020-2023  润新知