В большинстве случаев вы не читаете / пишете двоичную информацию самостоятельно. Существует несколько структур, которые могут сериализовать классы / структуры в / из двоичных данных. BinaryFormatter
или protobuf являются двумя способами.
Но если вы хотите попробовать это самостоятельно, я предлагаю вам использовать FileStream
, поскольку он работает точно так же, как любой другой поток (немного упрощенное утверждение, но почти верно;) Используйте BinaryWriter
для записи информации и BinaryReader
читать.
Нет никаких причин обрабатывать массив byte[]
напрямую. Вы всегда можете инициализировать MemoryStream
, чтобы получить доступ к BinaryReader
и BinaryWriter
.
Важно то, что вы читаете / пишете поля точно в том же порядке.
Обновление
Пример использования обновленного вопроса:
// Description -> |Identifier|name length|message length| name | message |
// Size in bytes -> | 4 | 4 | 4 |name length|message length|
using (var stream = new MemoryStream(yourByteBuffer))
{
using (reader = new BinaryReader(stream))
{
var identifier = reader.ReadInt32();
var nameLength = reader.ReadInt32();
var msgLength = reader.ReadInt32();
var name = reader.ReadChars(nameLength);
var msg = reader.ReadChars(msgLength);
}
}
// to get a string from the chars:
var message = new string(msg);