Как обновить большой XML-файл

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

6
задан 15 September 2008 в 12:41
поделиться

5 ответов

Если Ваш XML-файл является настолько большим, что обновление его является узким местом производительности, необходимо рассмотреть отодвигание от XML до более эффективного формата диска (или реальная база данных).

Если, однако, Вы просто чувствуете, что это могла бы быть проблема, помнить правила оптимизации:

  1. Не делайте этого
  2. (только эксперты), не делают этого, еще.
4
ответ дан 17 December 2019 в 02:35
поделиться

Я рекомендовал бы использовать http://vtd-xml.sourceforge.net/ VTD-XML

От их FAQ (http://vtd-xml.sourceforge.net/faq.html):

Почему я должен использовать VTD-XML для больших XML-файлов?

По многочисленным причинам, полученным в итоге ниже:

  • Производительность: производительность VTD-XML намного лучше, чем SAX
  • Простота для использования: Произвольный доступ, объединенный с XPath, подает заявку, легкую записать
  • Лучшая пригодность для обслуживания: код Приложения короче и более прост понять.
  • Инкрементное обновление: Случайные, небольшие изменения становятся очень эффективными.
  • Индексация: предварительно проанализированная форма XML далее повысит выполнение обработки.
  • Другие функции: Сокращение, вставка, разделение и собираются, XML-документы только возможно с VTD-XML.

Для использования в своих интересах VTD-XML мы рекомендовали, чтобы разработчики разделили свои крайние большие XML-документы на меньшие, более управляемые зажимы (<2 ГБ).

6
ответ дан 17 December 2019 в 02:35
поделиться

У Вас есть несколько опций здесь, но ни один из них не хорош.

Так как объекты XML не повреждаются в отличные части, необходимо будет или использовать некоторую модификацию уровня файловой системы с regex сопоставлением с образцом (sed, хорошее начало), ИЛИ необходимо повредить xml в меньшие части для управляемости.

0
ответ дан 17 December 2019 в 02:35
поделиться

Если возможно, сериализируйте XML и используйте инструменты Linux разности/патча/применять (или эквивалентные инструменты в Вашей платформе). Таким образом, Вы не должны иметь дело с парсингом, записью.

0
ответ дан 17 December 2019 в 02:35
поделиться

Обработайте большие XML-файлы с работами XQuery с XML-файлами размера гигабайта http://www.xquery.com

XQuery является языком запросов, который был разработан как собственный язык запросов XML. Поскольку большинство типов данных может быть представлено как XML, XQuery может также использоваться для запросов других типов данных. Например, XQuery может использоваться для запросов реляционных данных с помощью режима просмотра XML реляционной базы данных. Это важно, потому что много интернет-приложений должны интегрировать информацию от многочисленных источников, включая данные, найденные в веб-сообщениях, реляционных данных и различных исходных кодах XML. XQuery был специально предназначен для этого вида интеграции данных.

Например, предположите, что Ваша компания является финансовым учреждением, которое должно представить отчеты активов запаса для каждого клиента. Клиент запрашивает отчет с сообщением Простого протокола доступа к объектам (SOAP), которое представлено в XML. В большинстве компаний данные активов запаса хранятся в нескольких реляционных базах данных, таких как Oracle, Microsoft SQL Server или DB2. XQuery может запросить и сообщение SOAP и реляционные базы данных, создав отчет в XML.

XQuery основан на структуре XML и усиливает ту структуру, чтобы позволить выполнить запросы на любом типе данных, которые могут быть представлены как XML, включая реляционные данные. Кроме того, XQuery, API для Java (XQJ) позволяет Вашим запросам, выполненным в любой среде, которая поддерживает платформу J2EE.

-4
ответ дан 17 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

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