Class JCOBridgeDirectBuffer<T>
A class to manage shared memory between .NET and JVM using a memory region created in the CLR and shared with the JVM using https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html
public sealed class JCOBridgeDirectBuffer<T> : IEnumerable<T>, IEnumerable, IDisposable
Type Parameters
T
The Type to be used: it can be any byte, short, int, long, float, double or a type defined as a struct
- Inheritance
-
JCOBridgeDirectBuffer<T>
- Implements
-
IEnumerable<T>
- Inherited Members
- Extension Methods
Properties
this[long]
Get or set the memory of the shared buffer at index
public T this[long index] { get; set; }
Parameters
index
longThe memory index to be set or get
Property Value
- T
The value of the shared memory at
index
JavaObject
The IJavaObject referring to the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html managing the maoping
public IJavaObject JavaObject { get; }
Property Value
Methods
As<TNew>()
Returns a new instance of JCOBridgeDirectBuffer<T>
public JCOBridgeDirectBuffer<TNew> As<TNew>()
Returns
- JCOBridgeDirectBuffer<TNew>
The new instance of JCOBridgeDirectBuffer<T>
Type Parameters
TNew
The new Type to use
CopyTo(IntPtr, long, long, long)
Fills the destination
with the copy of the memory this JCOBridgeDirectBuffer<T> instance is holding
public long CopyTo(IntPtr destination, long destinationSize, long startPosition, long length)
Parameters
destination
IntPtrThe IntPtr describing the memory pointer data shall be written with the content of the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html
destinationSize
longThe available memory size of
destination
startPosition
longThe position within the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html where the copy shall start
length
longThe number of bytes to be copied from the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html into
destination
Returns
- long
The bytes copied
DisableCleanup()
Disable the internal object clean-up upon Dispose()
public void DisableCleanup()
DisableCleanupAndReturn()
Helper method to execute DisableCleanup() and return the internal IJavaObject
public IJavaObject DisableCleanupAndReturn()
Returns
- IJavaObject
The IJavaObject managing the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html
Dispose()
Execute Dispose() activities releasing the underlying .NET memory pinned when the JCOBridgeDirectBuffer<T> was requested
public void Dispose()
Remarks
This method removes the underlying memory and if there are operations in the JVM which needs the memory it is possible to encounter some ACCESS VIOLATIONS. Use this method, or a using clause, only if it is completely clear the risks; otherwise leave the task to the .NET GC which will execute a correct clean-up waiting for JVM that ends usage of the memory
EnableCleanup()
Enable the internal object clean-up upon Dispose()
public void EnableCleanup()
FillWithArray<TArray>(TArray[], long)
Copies the content of array
into memory managed from this JCOBridgeDirectBuffer<T> instance
public void FillWithArray<TArray>(TArray[] array, long destinationStartIndex = 0)
Parameters
array
TArray[]The
TArray
array to be copieddestinationStartIndex
longThe start index on destination buffer where to copy
Type Parameters
TArray
The Type to be used: it can be any byte, short, int, long, float, double or a type defined as a struct
GetEnumerator()
Returns an enumerator that iterates through the collection.
public IEnumerator<T> GetEnumerator()
Returns
- IEnumerator<T>
An enumerator that can be used to iterate through the collection.
GetValue(int)
Gets the value at the specified position in the one-dimensional Array. The index is specified as a 32-bit integer.
public T GetValue(int index)
Parameters
Returns
- T
The value at the specified position in the one-dimensional Array.
Exceptions
- ArgumentException
The current Array does not have exactly one dimension.
- IndexOutOfRangeException
index
is outside the range of valid indexes for the current Array.
GetValue(long)
Gets the value at the specified position in the one-dimensional Array. The index is specified as a 64-bit integer.
public T GetValue(long index)
Parameters
Returns
- T
The value at the specified position in the one-dimensional Array.
Exceptions
- ArgumentException
The current Array does not have exactly one dimension.
- ArgumentOutOfRangeException
index
is outside the range of valid indexes for the current Array.
Initialize()
Initializes every element of the value-type Array by calling the default constructor of the value type.
public void Initialize()
SetValue(T, int)
Sets a value to the element at the specified position in the one-dimensional Array. The index is specified as a 32-bit integer.
public void SetValue(T value, int index)
Parameters
value
TThe new value for the specified element.
index
intA 32-bit integer that represents the position of the Array element to set.
Exceptions
- ArgumentException
The current Array does not have exactly one dimension.
- InvalidCastException
value
cannot be cast to the element type of the current Array.- IndexOutOfRangeException
index
is outside the range of valid indexes for the current Array.
SetValue(T, long)
Sets a value to the element at the specified position in the one-dimensional Array. The index is specified as a 64-bit integer.
public void SetValue(T value, long index)
Parameters
value
TThe new value for the specified element.
index
longA 64-bit integer that represents the position of the Array element to set.
Exceptions
- ArgumentException
The current Array does not have exactly one dimension.
- InvalidCastException
value
cannot be cast to the element type of the current Array.- ArgumentOutOfRangeException
index
is outside the range of valid indexes for the current Array.
ToArray<TArray>()
Returns a TArray
array which is the copy of the memory this JCOBridgeDirectBuffer<T> instance is holding
public TArray[] ToArray<TArray>()
Returns
- TArray[]
A
TArray
array which is the copy of the memory this instance is holding
Type Parameters
TArray
The Type to be used: it can be any byte, short, int, long, float, double or a type defined as a struct
ToArray<TArray>(ref TArray[], bool)
Fills the array
with the copy of the memory this JCOBridgeDirectBuffer<T> instance is holding
public void ToArray<TArray>(ref TArray[] array, bool resizeToFill = true)
Parameters
array
TArray[]The array to be filled with the content of the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html
resizeToFill
boolResize
array
to contain all data available in the https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html
Type Parameters
TArray
The Type to be used: it can be any byte, short, int, long, float, double or a type defined as a struct
ToStream()
Converts this instance to a Stream can be used to manage directly the underlying memory without make intermediate array copy
public Stream ToStream()
Returns
Operators
implicit operator Stream(JCOBridgeDirectBuffer<T>)
Converts this instance to a Stream can be used to manage directly the underlying memory without make intermediate array copy
public static implicit operator Stream(JCOBridgeDirectBuffer<T> t)
Parameters
t
JCOBridgeDirectBuffer<T>The JCOBridgeDirectBuffer<T> to be converted
Returns
implicit operator T[](JCOBridgeDirectBuffer<T>)
Returns a T
array which is the copy of the memory the t
instance is holding
public static implicit operator T[](JCOBridgeDirectBuffer<T> t)
Parameters
t
JCOBridgeDirectBuffer<T>The JCOBridgeDirectBuffer<T> to be converted
Returns
- T[]
An array of
T