Заставьте XAP-файл Silverlight истекать из кэша браузера программным путем

Как заметил еще один, глава 11 Эффективной Java Джоша Блоха является незаменимым ресурсом в Java Serialization.

Пара вопросов, относящихся к этой главе, относящейся к вашему вопросу:

  • , предполагая, что вы хотите сериализовать состояние несериализуемого поля в MyClass2, это поле должно быть доступно для MyClass напрямую или через геттеры и сеттеры. MyClass должен будет реализовать пользовательскую сериализацию, предоставляя методы readObject и writeObject.
  • класс несериализуемого поля должен иметь API, позволяющий получать его состояние (для записи в поток объектов), а затем создавать экземпляр нового экземпляра с этим состоянием (при последующем чтении из потока объектов.)
  • за элемент 74 Эффективной Java, MyClass2 должен иметь конструктор no-arg, доступный для MyClass, иначе это невозможно для MyClass для расширения MyClass2 и реализации Serializable.

Я написал приведенный ниже пример, иллюстрирующий это.


class MyClass extends MyClass2 implements Serializable{

  public MyClass(int quantity) {
    setNonSerializableProperty(new NonSerializableClass(quantity));
  }

  private void writeObject(java.io.ObjectOutputStream out)
  throws IOException{
    // note, here we don't need out.defaultWriteObject(); because
    // MyClass has no other state to serialize
    out.writeInt(super.getNonSerializableProperty().getQuantity());
  }

  private void readObject(java.io.ObjectInputStream in)
  throws IOException {
    // note, here we don't need in.defaultReadObject();
    // because MyClass has no other state to deserialize
    super.setNonSerializableProperty(new NonSerializableClass(in.readInt()));
  }
}

/* this class must have no-arg constructor accessible to MyClass */
class MyClass2 {

  /* this property must be gettable/settable by MyClass.  It cannot be final, therefore. */
  private NonSerializableClass nonSerializableProperty;

  public void setNonSerializableProperty(NonSerializableClass nonSerializableProperty) {
    this.nonSerializableProperty = nonSerializableProperty;
  }

  public NonSerializableClass getNonSerializableProperty() {
    return nonSerializableProperty;
  }
}

class NonSerializableClass{

  private final int quantity;

  public NonSerializableClass(int quantity){
    this.quantity = quantity;
  }

  public int getQuantity() {
    return quantity;
  }
}
24
задан AwkwardCoder 4 December 2015 в 20:22
поделиться

2 ответа

Я не знаю, что библиотека делает то, что ты хочешь. Однако у меня есть реализация "union-find in F #" в этой записи блога . И из моих студенческих дней, я, кажется, помню какую-то популярную книгу о Схеме имел базовый алгоритм унификации в ней, который я использовал, чтобы кодировать "мини-пролог" реализации в тот день. Так что я чувствую, что это то, что кто-то с нужным опытом может собрать в выходные, если кто-то ищет проект. (Возможно, я добавлю его в свой собственный список TODO на выходные.)

-121--3677632-

Вы не указали, идет ли речь о 32-разрядном или 64-разрядном коде, и трудности, описанные вами и другими плакатами, в основном относятся к 32-разрядному коду. В 64-разрядной Windows, по существу, существует только одно соглашение о вызове (это также в статье википедии, связанной с Джоном Кноеллером), что означает, что вы знаете соглашение о вызове (конечно, за исключением любого готовящего свой собственный).

Кроме того, в соответствии с соглашением о вызове Microsoft x64, незнание количества параметров вызываемой функции не препятствует ее вызову, предоставляя столько параметров, сколько вы пожелаете/пользователь. Это потому, что вы, как вызывающий, откладываете пространство стека и очищаете его после этого. - Конечно, если не предоставить нужное [количество] параметров, вызываемая функция все еще может делать глупые вещи, потому что вы предоставляете неправильный ввод, но это другая история.

-121--4859430-

С помощью управления IIS добавьте пользовательский заголовок Cache-Control со значением no-cache . Это заставит браузер проверить, что любая кэшированная версия XAP является последней перед ее использованием.

26
ответ дан 28 November 2019 в 23:01
поделиться

Добавьте параметр запроса в URL для XAP в элементе на странице HTML:

  • clientBin / MyApp.xap? rev = 1
  • clientBin / MyApp.xap? rev = 2

Он будет проигнорирован и сломает кеш. {{1 }} В IE8 есть несколько инструментов управления кешем: Откройте инструменты разработчика:

  • Попробовать кэш ... Всегда обновлять с сервера
  • Попробовать кеш ... Очистить кеш браузера для этого домена .. .
8
ответ дан 28 November 2019 в 23:01
поделиться
Другие вопросы по тегам:

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