Class BinaryReaderExtensions
Contains useful extensions for the BinaryReader class.
Inherited Members
Namespace: TheXDS.MCART.Types.Extensions
Assembly: MCART.dll
Syntax
[RequiresDynamicCode("The class makes calls to dynamic code, so it is not compatible with trimming.")]
[RequiresUnreferencedCode("The class extensively uses reflection, so it is not compatible with trimming.")]
public static class BinaryReaderExtensions
Methods
| Edit this page View SourceGetBinaryReadMethod(Type)
Gets a read method defined in the BinaryReader class that can be used to read an object of the specified type.
Declaration
public static MethodInfo? GetBinaryReadMethod(Type t)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | t | Type for which to get a read method defined in the BinaryReader class. |
Returns
| Type | Description |
|---|---|
| MethodInfo | A read method defined in the BinaryReader class that can be used to read an object of the specified type, or null if no read method exists for the specified type. |
MarshalReadArray<T>(BinaryReader, in int)
Reads an array of type T by marshaling.
Declaration
public static T[] MarshalReadArray<T>(this BinaryReader br, in int count) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader to be used for reading. |
| int | count | Number of elements to be read. |
Returns
| Type | Description |
|---|---|
| T[] | An array of |
Type Parameters
| Name | Description |
|---|---|
| T | Type of elements to be read. Must be a struct readable by marshaling. |
MarshalReadArray<T>(BinaryReader, in long, in int)
Moves to a specific location in the Stream being read by
the BinaryReader and reads an array of type
T by marshaling.
Declaration
public static T[] MarshalReadArray<T>(this BinaryReader br, in long offset, in int count) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader to be used for reading. |
| long | offset | Offset from which to start reading the array. |
| int | count | Number of elements to be read. |
Returns
| Type | Description |
|---|---|
| T[] | An array of |
Type Parameters
| Name | Description |
|---|---|
| T | Type of elements to be read. Must be a struct readable by marshaling. |
MarshalReadStruct<T>(BinaryReader)
Reads a simple structure from the reader using
marshaling.
Declaration
public static T MarshalReadStruct<T>(this BinaryReader reader) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to perform the read. |
Returns
| Type | Description |
|---|---|
| T | The value read from |
Type Parameters
| Name | Description |
|---|---|
| T | Type of value to read. |
Remarks
This function differs from Read<T>(BinaryReader) in that the
read will be performed exclusively using marshaling techniques, without
including the default functions and/or those implemented in the
BinaryReader class or a known extension method of it.
This method also requires that strings and arrays be annotated with the
MarshalAsAttribute, setting a constant maximum expected size
for the string or array. To read structures with strings or arrays of
arbitrary size, consider using ReadStruct<T>(BinaryReader).
See Also
| Edit this page View SourceRead(BinaryReader, Type)
Reads a value of the specified type from the reader.
Declaration
public static object Read(this BinaryReader reader, Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to read. |
| Type | type | Type of value to read. |
Returns
| Type | Description |
|---|---|
| object | The value read from |
Remarks
If you know the exact type of the value to read and a method exists
in the BinaryReader class or an extension is defined
for reading that value, prefer using that method or extension for
better performance. Additionally, if the value to read is a simple
user-defined structure, you can use the
MarshalReadStruct<T>(BinaryReader) method to read a
structure using marshaling, which may provide better performance
than using this method.
Also, note that this method will read structures by reading the
values of their fields, including both private and public fields
(and therefore, properties).
Exceptions
| Type | Condition |
|---|---|
| InvalidOperationException | Thrown if no read method exists for the specified type. |
See Also
| Edit this page View SourceReadArray(BinaryReader, Type)
Reads an array of type arrayType from the
reader.
Declaration
public static Array ReadArray(this BinaryReader reader, Type arrayType)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to perform the read. |
| Type | arrayType | Type of array to read. |
Returns
| Type | Description |
|---|---|
| Array | An Array of the specified type that has been read from the specified BinaryReader. |
ReadArray(BinaryReader, Type, int)
Reads an array of type elementType from the
reader.
Declaration
public static Array ReadArray(this BinaryReader reader, Type elementType, int dimensions)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to perform the read. |
| Type | elementType | Type of elements in the array. |
| int | dimensions | Number of dimensions of the array. |
Returns
| Type | Description |
|---|---|
| Array | An Array with the specified dimensions and whose elements are of the specified type that has been read from the specified BinaryReader. |
ReadArray<T>(BinaryReader)
Reads a one-dimensional array from the reader.
Declaration
public static T[] ReadArray<T>(this BinaryReader reader)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to perform the read. |
Returns
| Type | Description |
|---|---|
| T[] | A one-dimensional array that has been read from the specified BinaryReader, whose elements are of the specified type. |
Type Parameters
| Name | Description |
|---|---|
| T | Type of elements in the array. |
ReadBytesAt(BinaryReader, in long, in int)
Reads an array of bytes starting on the specified offset.
Declaration
public static byte[] ReadBytesAt(this BinaryReader reader, in long offset, in int count)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | BinaryReader to be used for reading. |
| long | offset | Offset from which to start reading the array. |
| int | count | Number of bytes to be read. |
Returns
| Type | Description |
|---|---|
| byte[] | An array with |
ReadDateTime(BinaryReader)
Reads a DateTime.
Declaration
public static DateTime ReadDateTime(this BinaryReader br)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read. |
Returns
| Type | Description |
|---|---|
| DateTime | DateTime read from the BinaryReader. |
ReadEnum(BinaryReader, Type)
Reads an enumeration value.
Declaration
public static Enum ReadEnum(this BinaryReader br, Type enumType)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read. |
| Type | enumType | Type of enumeration value to read. |
Returns
| Type | Description |
|---|---|
| Enum | Enumeration value read from the BinaryReader. |
ReadEnum<T>(BinaryReader)
Reads an enumeration value.
Declaration
public static T ReadEnum<T>(this BinaryReader br) where T : struct, Enum
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read. |
Returns
| Type | Description |
|---|---|
| T | Enumeration value read from the BinaryReader. |
Type Parameters
| Name | Description |
|---|---|
| T | Type of enumeration value to read. |
ReadGuid(BinaryReader)
Reads a Guid.
Declaration
public static Guid ReadGuid(this BinaryReader br)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read. |
Returns
| Type | Description |
|---|---|
| Guid | Guid read from the BinaryReader. |
ReadNullTerminatedString(BinaryReader)
Reads a null-terminated string ('\0') using
UTF8 by default.
Declaration
public static string ReadNullTerminatedString(this BinaryReader br)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read the string. |
Returns
| Type | Description |
|---|---|
| string | A null-terminated string ( |
ReadNullTerminatedString(BinaryReader, Encoding)
Reads a null-terminated string ('\0').
Declaration
public static string ReadNullTerminatedString(this BinaryReader br, Encoding encoding)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read the string. |
| Encoding | encoding | Encoding to use for reading the string. |
Returns
| Type | Description |
|---|---|
| string | A null-terminated string ( |
ReadStruct<T>(BinaryReader)
Reads a simple structure from the reader.
Declaration
public static T ReadStruct<T>(this BinaryReader reader) where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to perform the read. |
Returns
| Type | Description |
|---|---|
| T | The value read from |
Type Parameters
| Name | Description |
|---|---|
| T | Type of value to read. |
Remarks
This method allows reading structures based on their fields, both private
and public (and therefore, including properties with backing fields), as
long as they are writable, i.e., not declared as readonly.
If the structure does not contain arbitrarily-sized strings or arrays,
or those have been annotated with the MarshalAsAttribute
attribute setting the SizeConst
property, consider using the
MarshalReadStruct<T>(BinaryReader) method, as it may
provide better performance.
See Also
| Edit this page View SourceReadTimeSpan(BinaryReader)
Reads a TimeSpan.
Declaration
public static TimeSpan ReadTimeSpan(this BinaryReader br)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | br | BinaryReader from which to read. |
Returns
| Type | Description |
|---|---|
| TimeSpan | TimeSpan read from the BinaryReader. |
Read<T>(BinaryReader)
Reads a value of the specified type from the reader.
Declaration
public static T Read<T>(this BinaryReader reader)
Parameters
| Type | Name | Description |
|---|---|---|
| BinaryReader | reader | Instance of BinaryReader from which to read. |
Returns
| Type | Description |
|---|---|
| T | The value read from |
Type Parameters
| Name | Description |
|---|---|
| T | Type of value to read. |
Remarks
If you know the exact type of the value to read and a method exists in the BinaryReader class or an extension is defined for reading that value, prefer using that method or extension for better performance. Additionally, if the value to read is a simple user-defined structure, you can use the MarshalReadStruct<T>(BinaryReader) method to read a structure using marshaling, which may provide better performance than using this method.
Exceptions
| Type | Condition |
|---|---|
| InvalidOperationException | Thrown if no read method exists for the specified type. |