Почему SootMethod не сериализуем?

Я занимаюсь программным анализом программ на Java с сажей. Я настраиваю класс, который включает поле типа SootMethod. Я хочу сохранить большое количество этих объектов и использовать их в другой программе. Итак, я считаю, что сериализация соответствует моим требованиям. Однако это вызывает NotSerializableException из-за SootMethod.

Что мне делать, если я хочу сохранить объекты с этим полем SootMethod? Почему SootMethod не сериализуем?

Я бы разместил ваш вопрос в списке рассылки Soot: sable.mcgill.ca/mailman/listinfo/soot-list

paulsm4 02.01.2019 07:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
70
1

Ответы 1

Вероятно, это связано с тем, что доза SootMethod не реализует java.io.Serializable, поэтому сериализовать экземпляр этого класса невозможно, поэтому, если вы хотите сериализовать объект, содержащий поле типа SootMethod, у вас есть 2 способа:

  1. Сделайте это поле transient! поэтому можно сериализовать объект, но когда вы десериализуете объект, это поле будет нулевым.
  2. Сделайте класс SootMethod сериализуемым, реализовав java.io.Serializable для этого класса.

Как правило, класс может быть сериализован, если реализует интерфейс java.io.Serializable, и все поля также реализуют этот интерфейс, и если поле не реализует его, поэтому это поле должно быть временным.

Спасибо за ваш ответ. Мне просто любопытно, почему этот метод не предназначен для сериализации. В сажи есть много других классов, которые можно сериализовать (например, Unit, Body и т. д.). Однако SootMethod - нет. На этой (sable.mcgill.ca/soot/doc/soot/class-use/SootMethod.html) веб-странице, которая знакомит с использованием SootMethod, говорится: «Сериализацию следует избегать с помощью статического анализа, поскольку каждый объект возникает из одного и того же места». Кажется, что этот класс предназначен для установки как несериализуемый. Почему?

Ya Xiao 02.01.2019 19:33

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