Сохранить массив 2-го объекта с помощью Java Сериализуемый - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть класс под названием «Настройки», который имеет массив «UniverseOut».

private static final long serialVersionUID = 2929431155275389116L;

private String projectName = "last-project";

private UniverseOut[] universeOut = new UniverseOut[unicastLimit];

Когда я изменяю «projectName» в классе настроек с помощью команды, он меняет его и когда я сохраняю проект и перезагружаю приложение, оно безошибочно читает имя.

Но массив UniverseOut вообще не сохраняется, он просто говорит, что массив принадлежит к этому типу, но сам объект / значения не сохраняются.

public class UniverseOut implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -1326425548448853224L;
private static final int max_ip = 10;
private static String[] ip = new String[max_ip];

}

И вот код как я сохраняю объекты как XML Файлы:

        String path = System.getProperty("user.dir");
        FileOutputStream fos = new FileOutputStream(path + "\\" + projectname + ".project");
        XMLEncoder xml = new XMLEncoder(fos);
        xml.setExceptionListener(new ExceptionListener() {
            public void exceptionThrown(Exception e) {
                System.out.println("Exception! :" + e.toString());
            }
        });
        xml.writeObject(getSettings());
        xml.close();
        fos.close();
        fos = new FileOutputStream(path + "\\last-project.project");
        xml = new XMLEncoder(fos);
        xml.writeObject(getSettings());
        xml.close();
        fos.close();

Файл создается и выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<java version="13.0.2" class="java.beans.XMLDecoder">
 <object class="preferences.Settings" id="Settings0">
  <void property="projectName">
   <string>lol</string>
  </void>
  <void property="universeOut">
   <void index="0">
    <object class="preferences.UniverseOut"/>
   </void>
   <void index="1">
    <object class="preferences.UniverseOut"/>
   </void>
  </void>
 </object>
</java>

И я совершенно уверен, что этот массив должен содержать некоторые вещи, но оно не сохранено.

1 Ответ

1 голос
/ 15 апреля 2020

Если UniverseOut не имеет никаких незаполненных полей c для сериализации, то сохранять нечего, так как статика неявно кратковременна .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...