Есть два аналогичных методов в Java ObjectInputStream:Когда будет использоваться ObjectInputStream.readUshared() vs .readObject()?
и
В документации говорится:
public Object readUnshared() throws IOException, ClassNotFoundException
Считывает объект "unshared" из ObjectInputStream. Этот метод идентичен readObject, за исключением того, что он предотвращает последующие вызовы readObject и readUnshared от возврата дополнительных ссылок на десериализованный экземпляр, полученный с помощью этого вызова. В частности:
Если readUnshared вызывается для десериализации обратной ссылки (представления потока объекта, который был ранее записан в поток), будет выведено исключение ObjectStreamException.
Если readUnshared успешно завершен, любые последующие попытки десериализации обратных ссылок на дескриптор потока, десериализованные readUnshared, будут вызывать исключение ObjectStreamException.
Удаление десериализации объекта с помощью readUnshared аннулирует дескриптор потока, связанный с возвращенным объектом. Обратите внимание, что это само по себе не всегда гарантирует, что ссылка, возвращаемая readUnshared, уникальна; десериализованный объект может определять метод readResolve, который возвращает объект, видимый другим сторонам, или readUnshared может возвращать объект класса или константу перечисления, доступную в другом месте потока или через внешние средства. Если десериализованный объект определяет метод readResolve, и вызов этого метода возвращает массив, тогда readUnshared возвращает неглубокий клон этого массива; это гарантирует, что возвращаемый объект массива уникален и не может быть получен во второй раз из вызова readObject или readUnshared в ObjectInputStream, даже если манипулировать базовым потоком данных.
Подклассы ObjectInputStream, которые переопределяют этот метод, могут быть созданы только в контекстах безопасности, обладающих «enableSubclassImplementation» SerializablePermission; любая попытка создать такой подкласс без этого разрешения вызовет исключение SecurityException.
Но мне было интересно, если кто-то в реальной жизни использует для этого с помощью .readUnshared()
против .readObject()
Никогда не использовал его. Одно использование было бы как проверка соответствия протокола, чтобы гарантировать, что отправитель использовал 'writeUnshared().' Если он не является описанным исключением, это приведет. – EJP