Skip to main content

Unity.Netcode.FastBufferWriter

Implements#

System.IDisposable

Inherited Members#

ValueType.Equals(Object)

ValueType.GetHashCode()

ValueType.ToString()

Object.Equals(Object, Object)

Object.GetType()

Object.ReferenceEquals(Object, Object)

Namespace: System.Dynamic.ExpandoObject#
Assembly: MLAPI.dll#
Syntax#
public struct FastBufferWriter : IDisposable

FastBufferWriter(Int32, Allocator, Int32)#

Create a FastBufferWriter.

Declaration#

public FastBufferWriter(int size, Allocator allocator, int maxSize = -1)

Parameters#

TypeNameDescription
System.Int32sizeSize of the buffer to create
AllocatorallocatorAllocator to use in creating it
System.Int32maxSizeMaximum size the buffer can grow to. If less than size, buffer cannot grow.

#

Capacity#

The current total buffer size

Declaration#

public readonly int Capacity { get; }

Property Value#

TypeDescription
System.Int32

Length#

The total amount of bytes that have been written to the stream

Declaration#

public readonly int Length { get; }

Property Value#

TypeDescription
System.Int32

MaxCapacity#

The maximum possible total buffer size

Declaration#

public readonly int MaxCapacity { get; }

Property Value#

TypeDescription
System.Int32

Position#

The current write position

Declaration#

public readonly int Position { get; }

Property Value#

TypeDescription
System.Int32

#

CopyFrom(FastBufferWriter)#

Copy the contents of another writer into this writer. The contents will be copied from the beginning of the other writer to its current position. They will be copied to this writer starting at this writer's current position.

Declaration#

public void CopyFrom(FastBufferWriter other)

Parameters#

TypeNameDescription
FastBufferWriterotherWriter to copy to

CopyTo(FastBufferWriter)#

Copy the contents of this writer into another writer. The contents will be copied from the beginning of this writer to its current position. They will be copied to the other writer starting at the other writer's current position.

Declaration#

public void CopyTo(FastBufferWriter other)

Parameters#

TypeNameDescription
FastBufferWriterotherWriter to copy to

Dispose()#

Frees the allocated buffer

Declaration#

public void Dispose()

EnterBitwiseContext()#

Retrieve a BitWriter to be able to perform bitwise operations on the buffer. No bytewise operations can be performed on the buffer until bitWriter.Dispose() has been called. At the end of the operation, FastBufferWriter will remain byte-aligned.

Declaration#

public BitWriter EnterBitwiseContext()

Returns#

TypeDescription
BitWriterA BitWriter

GetUnsafePtr()#

Gets a direct pointer to the underlying buffer

Declaration#

public byte *GetUnsafePtr()

Returns#

TypeDescription
System.Byte*

GetUnsafePtrAtCurrentPosition()#

Gets a direct pointer to the underlying buffer at the current read position

Declaration#

public byte *GetUnsafePtrAtCurrentPosition()

Returns#

TypeDescription
System.Byte*

GetWriteSize(String, Boolean)#

Get the required size to write a string

Declaration#

public static int GetWriteSize(string s, bool oneByteChars = false)

Parameters#

TypeNameDescription
System.StringsThe string to write
System.BooleanoneByteCharsWhether or not to use one byte per character. This will only allow ASCII

Returns#

TypeDescription
System.Int32

GetWriteSize\<T>()#

Get the size required to write an unmanaged value of type T

Declaration#

public static int GetWriteSize<T>()
where T : struct

Returns#

TypeDescription
System.Int32

Type Parameters#

NameDescription
T

GetWriteSize\<T>(in T)#

Get the size required to write an unmanaged value

Declaration#

public static int GetWriteSize<T>(in T value)
where T : struct

Parameters#

TypeNameDescription
Tvalue

Returns#

TypeDescription
System.Int32

Type Parameters#

NameDescription
T

GetWriteSize\<T>(T[], Int32, Int32)#

Get the required size to write an unmanaged array

Declaration#

public static int GetWriteSize<T>(T[] array, int count = -1, int offset = 0)
where T : struct

Parameters#

TypeNameDescription
T[]arrayThe array to write
System.Int32countThe amount of elements to write
System.Int32offsetWhere in the array to start

Returns#

TypeDescription
System.Int32

Type Parameters#

NameDescription
T

Seek(Int32)#

Move the write position in the stream. Note that moving forward past the current length will extend the buffer's Length value even if you don't write.

Declaration#

public void Seek(int where)

Parameters#

TypeNameDescription
System.Int32whereAbsolute value to move the position to, truncated to Capacity

ToArray()#

Returns an array representation of the underlying byte buffer. !!Allocates a new array!!

Declaration#

public byte[] ToArray()

Returns#

TypeDescription
System.Byte[]

Truncate(Int32)#

Truncate the stream by setting Length to the specified value. If Position is greater than the specified value, it will be moved as well.

Declaration#

public void Truncate(int where = -1)

Parameters#

TypeNameDescription
System.Int32whereThe value to truncate to. If -1, the current position will be used.

TryBeginWrite(Int32)#

Allows faster serialization by batching bounds checking. When you know you will be writing multiple fields back-to-back and you know the total size, you can call TryBeginWrite() once on the total size, and then follow it with calls to WriteValue() instead of WriteValueSafe() for faster serialization.

Unsafe write operations will throw OverflowException in editor and development builds if you go past the point you've marked using TryBeginWrite(). In release builds, OverflowException will not be thrown for performance reasons, since the point of using TryBeginWrite is to avoid bounds checking in the following operations in release builds.

Declaration#

public bool TryBeginWrite(int bytes)

Parameters#

TypeNameDescription
System.Int32bytesAmount of bytes to write

Returns#

TypeDescription
System.BooleanTrue if the write is allowed, false otherwise

Exceptions#

TypeCondition
System.InvalidOperationExceptionIf called while in a bitwise context

TryBeginWriteInternal(Int32)#

Internal version of TryBeginWrite. Differs from TryBeginWrite only in that it won't ever move the AllowedWriteMark backward.

Declaration#

public bool TryBeginWriteInternal(int bytes)

Parameters#

TypeNameDescription
System.Int32bytes

Returns#

TypeDescription
System.Boolean

Exceptions#

TypeCondition
System.InvalidOperationException

TryBeginWriteValue\<T>(in T)#

Allows faster serialization by batching bounds checking. When you know you will be writing multiple fields back-to-back and you know the total size, you can call TryBeginWrite() once on the total size, and then follow it with calls to WriteValue() instead of WriteValueSafe() for faster serialization.

Unsafe write operations will throw OverflowException in editor and development builds if you go past the point you've marked using TryBeginWrite(). In release builds, OverflowException will not be thrown for performance reasons, since the point of using TryBeginWrite is to avoid bounds checking in the following operations in release builds. Instead, attempting to write past the marked position in release builds will write to random memory and cause undefined behavior, likely including instability and crashes.

Declaration#

public bool TryBeginWriteValue<T>(in T value)
where T : struct

Parameters#

TypeNameDescription
TvalueThe value you want to write

Returns#

TypeDescription
System.BooleanTrue if the write is allowed, false otherwise

Type Parameters#

NameDescription
T

Exceptions#

TypeCondition
System.InvalidOperationExceptionIf called while in a bitwise context

WriteByte(Byte)#

Write a byte to the stream.

Declaration#

public void WriteByte(byte value)

Parameters#

TypeNameDescription
System.BytevalueValue to write

WriteBytes(Byte*, Int32, Int32)#

Write multiple bytes to the stream

Declaration#

public void WriteBytes(byte *value, int size, int offset = 0)

Parameters#

TypeNameDescription
System.Byte*valueValue to write
System.Int32sizeNumber of bytes to write
System.Int32offsetOffset into the buffer to begin writing

WriteBytes(Byte[], Int32, Int32)#

Write multiple bytes to the stream

Declaration#

public void WriteBytes(byte[] value, int size = -1, int offset = 0)

Parameters#

TypeNameDescription
System.Byte[]valueValue to write
System.Int32sizeNumber of bytes to write
System.Int32offsetOffset into the buffer to begin writing

WriteByteSafe(Byte)#

Write a byte to the stream.

"Safe" version - automatically performs bounds checking. Less efficient than bounds checking for multiple writes at once by calling TryBeginWrite.

Declaration#

public void WriteByteSafe(byte value)

Parameters#

TypeNameDescription
System.BytevalueValue to write

WriteBytesSafe(Byte*, Int32, Int32)#

Write multiple bytes to the stream

"Safe" version - automatically performs bounds checking. Less efficient than bounds checking for multiple writes at once by calling TryBeginWrite.

Declaration#

public void WriteBytesSafe(byte *value, int size, int offset = 0)

Parameters#

TypeNameDescription
System.Byte*valueValue to write
System.Int32sizeNumber of bytes to write
System.Int32offsetOffset into the buffer to begin writing

WriteBytesSafe(Byte[], Int32, Int32)#

Write multiple bytes to the stream

"Safe" version - automatically performs bounds checking. Less efficient than bounds checking for multiple writes at once by calling TryBeginWrite.

Declaration#

public void WriteBytesSafe(byte[] value, int size = -1, int offset = 0)

Parameters#

TypeNameDescription
System.Byte[]valueValue to write
System.Int32sizeNumber of bytes to write
System.Int32offsetOffset into the buffer to begin writing

WriteNetworkSerializable\<T>(in T)#

Write an INetworkSerializable

Declaration#

public void WriteNetworkSerializable<T>(in T value)
where T : INetworkSerializable

Parameters#

TypeNameDescription
TvalueThe value to write

Type Parameters#

NameDescription
T

WriteNetworkSerializable\<T>(INetworkSerializable[], Int32, Int32)#

Write an array of INetworkSerializables

Declaration#

public void WriteNetworkSerializable<T>(INetworkSerializable[] array, int count = -1, int offset = 0)
where T : INetworkSerializable

Parameters#

TypeNameDescription
INetworkSerializable[]arrayThe value to write
System.Int32count
System.Int32offset

Type Parameters#

NameDescription
T

WritePartialValue\<T>(T, Int32, Int32)#

Write a partial value. The specified number of bytes is written from the value and the rest is ignored.

Declaration#

public void WritePartialValue<T>(T value, int bytesToWrite, int offsetBytes = 0)
where T : struct

Parameters#

TypeNameDescription
TvalueValue to write
System.Int32bytesToWriteNumber of bytes
System.Int32offsetBytesOffset into the value to begin reading the bytes

Type Parameters#

NameDescription
T

Exceptions#

TypeCondition
System.InvalidOperationException
System.OverflowException

WriteValue(String, Boolean)#

Writes a string

Declaration#

public void WriteValue(string s, bool oneByteChars = false)

Parameters#

TypeNameDescription
System.StringsThe string to write
System.BooleanoneByteCharsWhether or not to use one byte per character. This will only allow ASCII

WriteValue\<T>(in T)#

Write a value of any unmanaged type (including unmanaged structs) to the buffer. It will be copied into the buffer exactly as it exists in memory.

Declaration#

public void WriteValue<T>(in T value)
where T : struct

Parameters#

TypeNameDescription
TvalueThe value to copy

Type Parameters#

NameDescription
TAny unmanaged type

WriteValue\<T>(T[], Int32, Int32)#

Writes an unmanaged array

Declaration#

public void WriteValue<T>(T[] array, int count = -1, int offset = 0)
where T : struct

Parameters#

TypeNameDescription
T[]arrayThe array to write
System.Int32countThe amount of elements to write
System.Int32offsetWhere in the array to start

Type Parameters#

NameDescription
T

WriteValueSafe(String, Boolean)#

Writes a string

"Safe" version - automatically performs bounds checking. Less efficient than bounds checking for multiple writes at once by calling TryBeginWrite.

Declaration#

public void WriteValueSafe(string s, bool oneByteChars = false)

Parameters#

TypeNameDescription
System.StringsThe string to write
System.BooleanoneByteCharsWhether or not to use one byte per character. This will only allow ASCII

WriteValueSafe\<T>(in T)#

Write a value of any unmanaged type (including unmanaged structs) to the buffer. It will be copied into the buffer exactly as it exists in memory.

"Safe" version - automatically performs bounds checking. Less efficient than bounds checking for multiple writes at once by calling TryBeginWrite.

Declaration#

public void WriteValueSafe<T>(in T value)
where T : struct

Parameters#

TypeNameDescription
TvalueThe value to copy

Type Parameters#

NameDescription
TAny unmanaged type

WriteValueSafe\<T>(T[], Int32, Int32)#

Writes an unmanaged array

"Safe" version - automatically performs bounds checking. Less efficient than bounds checking for multiple writes at once by calling TryBeginWrite.

Declaration#

public void WriteValueSafe<T>(T[] array, int count = -1, int offset = 0)
where T : struct

Parameters#

TypeNameDescription
T[]arrayThe array to write
System.Int32countThe amount of elements to write
System.Int32offsetWhere in the array to start

Type Parameters#

NameDescription
T

Implements#

System.IDisposable