Сериализация очень большого списка

Извините у меня нет копии стандарта на мне.
я определенно хотел бы категорический ответ на это, таким образом, кто-то с копией стандарта хочет совместно использовать главу и стих на том, что происходит:

От моего оконечного понимания только назван эквивалентностью:

  • механизм обработки исключений не может найти обработчик для вызванной исключительной ситуации.
    следующее более конкретные случаи этого:
    • раскручивание стека During, исключение выходит из деструктора.
    • брошенное выражение, исключение выходит из конструктора.
    • исключение выходит из конструктора/деструктора не локальных помех (т.е. глобальный)
    • , исключение выходит из функции, зарегистрированной в atexit ().
    • исключение выходит основной ()
  • Попытка повторно бросить исключение, когда никакое исключение в настоящее время не распространяет.
  • непредвиденная исключительная ситуация выходит из функции со спецификаторами исключения (через неожиданный)
5
задан kresjer 23 September 2009 в 08:44
поделиться

6 ответов

Вы можете просмотреть список, создать объект, а затем сразу передать его ObjectOutputStream , который записывает их в файл.

3
ответ дан 14 December 2019 в 08:55
поделиться
  1. Считайте объекты один за другим из БД

  2. Не помещайте их в список, а записывайте их в файл по мере их получения из БД

Никогда не храните более единый объект в ОЗУ. Когда вы читаете объект, завершите цикл чтения, когда readObject () вернет null (= конец файла)

2
ответ дан 14 December 2019 в 08:55
поделиться

Подумайте также об установке размера выборки для драйвера JDBC, например, драйвер JDBC для mysql по умолчанию выбирает весь набор результатов.

читайте здесь для получения дополнительной информации: размер выборки

1
ответ дан 14 December 2019 в 08:55
поделиться

Думаю, вы проверили, действительно необходимо сохранять данные на диск. Он не может оставаться в базе данных, не так ли?


Чтобы обрабатывать слишком большие данные, вам нужно уменьшить их: -)

Одна из идей состоит в том, чтобы получать данные по частям :

  • начните с запроса, чтобы вы не создавали этот огромный список (потому что это рано или поздно станет точкой отказа)
  • сериализуйте ваш меньший список объектов
  • , затем loop
1
ответ дан 14 December 2019 в 08:55
поделиться

Похоже, вы извлекаете большой набор данных из базы данных и конвертируете их в список объектов и сериализуете их одним выстрелом.

Не делайте этого ... в конце концов, это может привести к применению сбой.

Вместо этого вы должны

  • минимизировать объем данных, извлекаемых из базы данных. (скажем 1000 записей вместо 1 M)
  • преобразуйте их в бизнес-объект
  • И сериализуйте их.
  • И выполните ту же процедуру до последней записи

, таким образом вы можете избежать проблем с производительностью.

0
ответ дан 14 December 2019 в 08:55
поделиться

ObjectOutputStream будет работать, но у него больше накладных расходов. Я думаю, что DataOutputStream / DataInputStream - лучший выбор.

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

    DataOutputStream os = new DataOutputStream(new FileOutputStream("myfile"));
    for (...)
        os.writeInt(num);

Одна проблема и с объектом, и с потоком данных состоит в том, что write (int) записывает только один байт. Пожалуйста, используйте writeInt (int).

0
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

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