"Converting Byte array is obsolete, use SByte array instead" 即使使用 SByte 数组

"Converting Byte array is obsolete, use SByte array instead" even when using SByte array

我正在从 Unity C# 调用此 Java 方法。即使我发送的是 byte[] 而不是 byte[],我还是收到一个错误提示。有什么想法吗?

Java方法:

public void sendBytes(byte[] bytes) {
        if (_connectionThread != null) {
            Log.i(LOG_TAG, "Sending " + bytes.length + " byte(s).");
            _connectionThread.sendBytes(bytes);
        } else {
            Log.i(LOG_TAG, "Unable to send bytes because the connection thread is not initialized.");
        }
    }

C#:

public void SendBytes(byte[] bytes)
                    {
                        sbyte[] signedBytes = (sbyte[])(Array)bytes;
                        _bluetoothClient.Call("sendBytes", signedBytes);
                    }
2021-04-18 19:33:14.024 4733-4796/com.company.product W/Unity: AndroidJNIHelper: converting Byte array is obsolete, use SByte array instead
    UnityEngine.StackTraceUtility:ExtractStackTrace () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37)
    UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
    UnityEngine.Logger:Log (UnityEngine.LogType,object)
    UnityEngine.Debug:LogWarning (object)
    UnityEngine._AndroidJNIHelper:ConvertToJNIArray (System.Array) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1208)
    UnityEngine._AndroidJNIHelper:CreateJNIArgArray (object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1027)
    UnityEngine.AndroidJNIHelper:CreateJNIArgArray (object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJNI.bindings.cs:112)
    UnityEngine.AndroidJavaObject:_Call (string,object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:410)
    UnityEngine.AndroidJavaObject:Call<sbyte> (string,sbyte[]) (at

可能是通过.GetType()Type.GetElementType()使用反射来检查数组类型。您的强制转换(老实说:我很惊讶竟然能起作用,但是:数组方差很复杂)不会改变数组类型。

您可以尝试分配一个新数组(实际上是一个 sbyte[]),将数据复制过来,看看是否可行。但这显然效率较低。如果 API 允许您指定一个数组范围(数组+偏移量+计数),您可以从数组池中租用一个超大数组并使用它,以避免分配步骤。