Как Маршаллу использовать JAXB (или XStream) для обновления XML-файла без записи всего файла - PullRequest
3 голосов
/ 22 июля 2011

В качестве примера, скажем, у меня есть файл customerX.xml, который я уже распаковал, используя JAXB (или XStream).

Я обновляю номер телефона этого клиента в моем Java-объекте, а затем перенаправляю содержимое обратно в тот же customerX.xml

Вот старый пример jaxb обновления xml от 2003 года. Хотя, может быть, есть лучший способ.

Вопросы

Будет ли маршалинг записывать все содержимое файла, хотя я просто обновляю один элемент? Если да, то есть ли лучший способ упорядочить и обновить определенный элемент XML-файла с помощью JAXB или XStream?

Как сделать поток операций маршалинга безопасным на случай, если несколько потоков могут маршалировать в один и тот же XML-файл?

1 Ответ

6 голосов
/ 22 июля 2011

Будет ли маршалинг записывать все содержимое файла, хотя я просто обновляю один элемент?

Да. Маршаллер не знает и не заботится о том, насколько сильно вы изменились, все, что его волнует, - это состояние объектов во время сортировки.

Есть ли лучший способ упорядочить и обновить определенный элемент XML-файла, используя JAXB или XStream?

Не совсем. Если вам нужно обновить фрагменты данных, то данные действительно должны храниться как отдельные файлы, а не как один большой файл.

Как сделать поток операций маршалинга безопасным на случай, если несколько потоков могут маршалировать в один и тот же XML-файл?

Использование обычных методов синхронизации Java-потоков (т. Е. Использование synchronized методов или использование средств блокировки в java.util.concurrent).

...