示例#1
0
        public FastJavaByteArray(int length, bool readOnly = true)
        {
            if (length <= 0)
            {
                throw new ArgumentOutOfRangeException();
            }

            IsReadOnly = readOnly;

            IntPtr arrayHandle = JniEnvEx.NewByteArray(length);

            if (arrayHandle == IntPtr.Zero)
            {
                throw new OutOfMemoryException();
            }

            SetHandle(arrayHandle, JniHandleOwnership.DoNotTransfer);
            Count = length;
            bool isCopy = false;

            unsafe
            {
                Raw = JniEnvEx.GetByteArrayElements(arrayHandle, ref isCopy);
            }
        }
示例#2
0
 protected override void Dispose(bool disposing)
 {
     unsafe
     {
         // tell Java that we're done with this array
         JniEnvEx.ReleaseByteArrayElements(Handle, Raw, IsReadOnly ? PrimitiveArrayReleaseMode.Release : PrimitiveArrayReleaseMode.CommitAndRelease);
     }
     base.Dispose(disposing);
 }
示例#3
0
        public FastJavaByteArray(IntPtr handle, bool readOnly = true) : base(handle, JniHandleOwnership.DoNotTransfer)
        {
            if (handle == IntPtr.Zero)
            {
                throw new ArgumentNullException("handle");
            }

            IsReadOnly = readOnly;

            Count = JNIEnv.GetArrayLength(handle);
            bool isCopy = false;

            unsafe
            {
                Raw = JniEnvEx.GetByteArrayElements(handle, ref isCopy);
            }
        }