Сериализация Java: readObject () против readResolve ()

Для этого в ASP.Net Identity вы обрабатываете ответы как пользовательские пароли.

Используйте userManager.PasswordHasher.HashPassword(Answer1); для генерации хэша для каждого ответа для сохранения в пользовательских свойствах / полях класса в базе данных. (Где userManager - это экземпляр Identity UserManager)

При восстановлении используйте

var verification = userManager.PasswordHasher.VerifyHashedPassword(dbHash, Answer1);

, чтобы проверить вызов.

Затем вы можете проверить, f3] истинно для каждого ответа.

ref: MSDN

125
задан Aniket Thakur 14 June 2016 в 17:58
поделиться

2 ответа

readResolve используется для замены объекта, считанного из потока. Единственное применение, которое я когда-либо видел для этого, - это принуждение к синглетонам; при чтении объекта замените его экземпляром синглтона. Это гарантирует, что никто не сможет создать другой экземпляр путем сериализации и десериализации синглтона.

131
ответ дан 24 November 2019 в 01:00
поделиться

Пункт 90, Эффективная Java, 3-е издание охватывает readResolve и writeReplace для последовательных прокси - их основное применение. В примерах не записываются методы readObject и writeObject , поскольку они используют сериализацию по умолчанию для чтения и записи полей.

readResolve вызывается после readObject ] вернулся (и наоборот, writeReplace вызывается перед writeObject и, вероятно, для другого объекта). Объект, возвращаемый методом, заменяет этот объект, возвращенный пользователю ObjectInputStream.readObject , и любые дальнейшие обратные ссылки на объект в потоке. И readResolve , и writeReplace могут возвращать объекты одного или разных типов. Возвращение того же типа полезно в некоторых случаях, когда поля должны быть final и либо требуется обратная совместимость, либо значения должны копироваться и / или проверяться.

Использование readResolve не обеспечивает одноэлементное свойство.

28
ответ дан 24 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

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