Class DataStreamUnsafeUtility
DataStream (Reader/Writer) unsafe utilities used to do pointer operations on streams.
These are added to the DataStreamWriter
/DataStreamReader
classes as extensions, so
you need to add using Unity.Collections.LowLevel.Unsafe
at the top
of file where you need to access these functions.
Since these are unsafe C# operations care must be taken when using them, it can easily crash the editor/player.
Every time data is written directly to the data stream buffer you must call
WriteBytesWithUnsafePointer
afterwards with the length of the data written so
that the stream class can internally keep track of how much of the internal
buffer has been written to.
The functions have read/write access check variants which utilize the job system atomic safety handle. The ENABLE_UNITY_COLLECTIONS_CHECKS define needs to be used for this to work. For more information see Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle.
Example of typical usage:
// Manually write some numbers into a data stream from a source buffer.
var data = new DataStreamWriter(4, Allocator.Temp);
unsafe
{
var ptr = data.GetUnsafePtr();
var sourceData = new NativeArray<byte>(4, Allocator.Temp);
sourceData[0] = 42;
sourceData[1] = 42;
sourceData[2] = 42;
sourceData[3] = 42;
UnsafeUtility.MemCpy(ptr, sourceData.GetUnsafePtr(), sourceData.Length);
data.WriteBytesWithUnsafePointer(sourceData.Length);
}
Namespace: Unity.Networking.Transport.LowLevel.Unsafe
Syntax
public static class DataStreamUnsafeUtility
Methods
CreateReaderFromExistingData(Byte*, Int32)
Declaration
public static DataStreamReader CreateReaderFromExistingData(byte *data, int length)
Parameters
Type | Name | Description |
---|---|---|
Byte* | data | |
Int32 | length |
Returns
Type | Description |
---|---|
DataStreamReader |
GetUnsafeBufferPointerWithoutChecks(DataStreamWriter)
Get the byte* pointer to the buffer backing the DataStreamWriter
.
Does not check the safety handle for read/write access.
Declaration
public static byte *GetUnsafeBufferPointerWithoutChecks(this DataStreamWriter strm)
Parameters
Type | Name | Description |
---|---|---|
DataStreamWriter | strm |
Returns
Type | Description |
---|---|
Byte* | Pointer to the data stream buffer. |
GetUnsafePtr(DataStreamWriter)
Get the byte* pointer to the start of the buffer backing the DataStreamWriter
.
A safety check is done to see if you have write access to the buffer.
Declaration
public static byte *GetUnsafePtr(this DataStreamWriter strm)
Parameters
Type | Name | Description |
---|---|---|
DataStreamWriter | strm |
Returns
Type | Description |
---|---|
Byte* | Pointer to the data stream buffer. |
GetUnsafeReadOnlyPtr(DataStreamReader)
Get the byte* pointer to the start of the buffer backing the DataStreamReader
.
A safety check is done to make sure you only have read access to the buffer.
Declaration
public static byte *GetUnsafeReadOnlyPtr(this DataStreamReader strm)
Parameters
Type | Name | Description |
---|---|---|
DataStreamReader | strm |
Returns
Type | Description |
---|---|
Byte* | Pointer to the data stream buffer. |
GetUnsafeReadOnlyPtr(DataStreamWriter)
Get the byte* pointer to the start of the buffer backing the DataStreamWriter
.
A safety check is done to make sure you only have read access to the buffer.
Declaration
public static byte *GetUnsafeReadOnlyPtr(this DataStreamWriter strm)
Parameters
Type | Name | Description |
---|---|---|
DataStreamWriter | strm |
Returns
Type | Description |
---|---|
Byte* | Pointer to the data stream buffer. |
WriteBytesWithUnsafePointer(DataStreamWriter, Int32)
Signal how many bytes have been written to the buffer used by the data stream using one of the unsafe pointer getters.
Declaration
public static void WriteBytesWithUnsafePointer(this DataStreamWriter strm, int length)
Parameters
Type | Name | Description |
---|---|---|
DataStreamWriter | strm | |
Int32 | length | Amount of data written to the buffer. |
Exceptions
Type | Condition |
---|---|
ArgumentOutOfRangeException | If the length specified brings the total length to a value higher than the capacity of the buffer. |