XMLDecoder.readObject () возвращает ноль - PullRequest
2 голосов
/ 03 мая 2009

Я пытаюсь прочитать объект из файла XML, используя XMLDecoder. Конструкция вроде бы в порядке, но когда я вызываю метод readObject (), я получаю нулевое значение вместо ожидаемого объекта.

Файл существует, и созданный BufferedInputStream правильно читает файл. Этот код работает нормально на оригинальном ноутбуке Vista, на котором он был написан, но не работает на моей машине Win Xp.

     try {
        XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(
            new FileInputStream("Params.xml")));

        Params = (Parameters)decoder.readObject();
        decoder.close();

    } catch (FileNotFoundException e) {
        System.out.println(e.toString()); 
    }

Ответы [ 4 ]

1 голос
/ 05 июня 2009

Используется ли на блоках Vista и XP одна и та же версия Java? Также проверьте версию Java, использованную для первоначального создания xml.

Еще одним тестом будет кодирование объекта в окне XP и попытка его чтения.

1 голос
/ 03 мая 2009

Если он не работает на вашем компьютере с XP, но работает на вашем компьютере с Vista, то это звучит как проблема окружающей среды.

Поскольку речь идет о XML, мне интересно, есть ли проблема с кодировкой символов, а в вашей среде Vista / XP установлены разные свойства кодирования. Если это так, то XMLDecoder может быть не в состоянии правильно проанализировать XML.

Проверьте системное свойство file.encoding в обеих установках. Было бы интересно посмотреть, отличаются ли они. Указывает ли ваш XML-файл кодировку символов?

0 голосов
/ 03 мая 2009

Вы можете попробовать создать свой XMLDecoder с пользовательским ExceptionListener и вставить в него println.

public XMLDecoder(InputStream in,
                  Object owner,
                  ExceptionListener exceptionListener)

Кроме того, readObject выдает ArrayIndexOutOfBoundsException, если в потоке нет объектов (или больше нет объектов), вы ловите это исключение?

0 голосов
/ 03 мая 2009

Это означает, что как-то ваш InputStream считается 'пустым' XmlDecoder.

Не могли бы вы попробовать:

XMLDecoder decoder = new XMLDecoder(new FileInputStream("Params.xml"));

с использованием FileInputStream вместо BufferedInputStream?

Или попробуйте reset() ваш BufferedInputStream, прежде чем использовать его при XmlEncoder инициализации?

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