Почему средства просмотра памяти процесса читают байтовые массивы в строки?

У меня есть 2 приложения C#, которые общаются друг с другом через NetPipe WCF. Одно приложение отправляет другому приложению массив байтов. Если я проверяю карту памяти принимающего приложения с помощью средства просмотра памяти процесса (например, CheatEngine), я могу прочитать полученный массив байтов в виде строки. Почему это происходит?

1 ответ

Решение

Ну, ответ довольно прост, массив, естественно, является ссылочным типом, почему? потому что он не может иметь единственное значение в памяти, в то время как он указывает на множество разных областей памяти, каждая из которых имеет определенное значение. Вот почему это должен быть ссылочный тип. По этой причине объект (массив) не может быть напрямую передан с одного компьютера на другой. Тогда что происходит? Все значения, связанные с объектом, должны быть извлечены из памяти, и они должны быть "Сериализованы", чтобы при преобразовании они могли быть преобразованы в исходную форму. Это называется десериализацией. Существует много разных способов сериализации и десериализации данных, таких как преобразование объекта в XML или JSON, или вместо этого выполнение двоичной сериализации, которая очень похожа на то, что вы делаете, я имею в виду передачу байтового массива.

Для более подробной информации представьте следующую модель:

public class MyModel{
   public string Name{get; set;}
   public string Email{get; set;}
}

если вы хотите сообщить:

MyModel Model = new MyModel{ Name ="Jack", Email = "Gmail"};

Этот объект будет переведен в нечто вроде:

<MyModel>
   <Name>Jack</Name>
   <Email>Gmail</Email>
</MyModel>

Так что он может быть передан, и когда он будет получен, он будет возвращен к своей первоначальной форме. Тем не менее MyModel Класс Mist будет доступен с обеих сторон, поэтому я предлагаю сохранить эти типы в файлах DLL для повторного использования. Вы хотите знать больше, дайте мне знать, чтобы добавить больше деталей.

Другие вопросы по тегам