Байт для сериализации байта структуры в C#

Вот что вам нужно сделать:

  1. открыть затмение, щелкнуть правой кнопкой мыши на вкладке проводника проекта и выбрать импорт
  2. , открыть папку General и нажать [111 ]
  3. найдите несжатую папку, загруженную с GitHub, и завершите работу.

На данный момент ваш проект правильно добавлен в Eclipse, но если вы попытаетесь запустить MainComponent.java, он, вероятно, вернет некоторые исключения. Чтобы решить, что вам нужно скачать LWJGL, для меня это работало с 2.9.3, так что перейдите на этот. После того, как вы загрузили и распаковали его, вернитесь в Eclipse и выполните следующие действия:

  1. Щелкните правой кнопкой мыши папку и свойства проекта
  2. Выберите Java Build Path слева и затем перейдите к и откройте вкладку Библиотеки JRE System Library
  3. Теперь выберите Native library location, нажмите кнопку редактирования и перейдите к: [poath you put your LWJGL folder in]/lwjgl-2.9.3/native/[your OS]
  4. Теперь нажмите Apply и закройте, и ваш проект готов к запуску .

После всего этого процесса, когда я запустил MainComponent.java, он скомпилировался и запустился, но это было невозможно воспроизвести, но я думаю, что это зависит от исходного кода, а не от процесса импорта проекта.

Надеюсь, вам удачи в этом проекте.

9
задан Jason Down 19 December 2013 в 20:17
поделиться

3 ответа

Как Chris говорит, можно использовать небезопасный код - в этом случае необходимо удостовериться, что Вы указываете расположение явно. В той точке, конечно, Вы уменьшаете способность CLR оптимизировать немного - Вы закончите с невыровненным доступом, потерей атомарности и т.д. Это не может быть важно для Вас, но это стоит принять во внимание.

Лично, я расцениваю это как являющееся довольно хрупким способом сериализировать/десериализовать. Если что-нибудь изменяется, Ваши данные нечитабельны. При попытке работать на архитектуре, которая использует другой порядок байтов, то Вы найдете все свои значения завинченными и т.д. Кроме того, использование расположения в оперативной памяти перестанет работать, как только необходимо использовать ссылочные типы - который мог влиять собственный дизайн типов, поощряя Вас использовать структуры, где Вы будете иначе использовать классы.

Я далеко предпочитаю или явно чтению и записи значения (например, с BinaryWriter или предпочтительно версией двоичного устройства записи, которое позволяет Вам установить порядок байтов), или используют портативную платформу сериализации как Буферы Протокола.

9
ответ дан 4 December 2019 в 08:53
поделиться

Возможно, универсальный Сериализируют/Десериализовывают методы:

public static string SerializeObject<T>(T obj)
{
      string xmlString = null;
      using(MemoryStream memoryStream = new MemoryStream())
      {
        using(XmlSerializer xs = new XmlSerializer(typeof(T)))
        {
            XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
            xs.Serialize(xmlTextWriter, obj);
            memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
            xmlString = UTF8ByteArrayToString(memoryStream.ToArray());      
        }
      }
      return xmlString;
}

public static T DeserializeObject<T>(string xml)
{
   XmlSerializer xs = new XmlSerializer(typeof(T));
   MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xml));
   XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
   return (T)xs.Deserialize(memoryStream);
}

Исходный найденный здесь.

0
ответ дан 4 December 2019 в 08:53
поделиться

См. Эту ссылку. При этом используется механизм Marshal, чтобы получить актуальные данные ваших структур и скопировать их в Byte []. Также как их скопировать обратно. Эти функции хороши тем, что они являются универсальными, поэтому они будут работать со всеми вашими структурами (если только у них нет типов данных с переменным размером, например строк)

http://dooba.net/2009/07/c-sharp -and-сериализации-байтовых-массивов /

1
ответ дан 4 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: