Извините у меня нет копии стандарта на мне.
я определенно хотел бы категорический ответ на это, таким образом, кто-то с копией стандарта хочет совместно использовать главу и стих на том, что происходит:
От моего оконечного понимания только назван эквивалентностью:
Вы можете просмотреть список, создать объект, а затем сразу передать его ObjectOutputStream , который записывает их в файл.
Считайте объекты один за другим из БД
Не помещайте их в список, а записывайте их в файл по мере их получения из БД
Никогда не храните более единый объект в ОЗУ. Когда вы читаете объект, завершите цикл чтения, когда readObject ()
вернет null
(= конец файла)
Подумайте также об установке размера выборки для драйвера JDBC, например, драйвер JDBC для mysql по умолчанию выбирает весь набор результатов.
читайте здесь для получения дополнительной информации: размер выборки
Думаю, вы проверили, действительно необходимо сохранять данные на диск. Он не может оставаться в базе данных, не так ли?
Чтобы обрабатывать слишком большие данные, вам нужно уменьшить их: -)
Одна из идей состоит в том, чтобы получать данные по частям :
Похоже, вы извлекаете большой набор данных из базы данных и конвертируете их в список объектов и сериализуете их одним выстрелом.
Не делайте этого ... в конце концов, это может привести к применению сбой.
Вместо этого вы должны
, таким образом вы можете избежать проблем с производительностью.
ObjectOutputStream будет работать, но у него больше накладных расходов. Я думаю, что DataOutputStream / DataInputStream
- лучший выбор.
Просто читайте / пишите одно за другим, и пусть поток заботится о буферизации. Например, вы можете сделать что-то вроде этого:
DataOutputStream os = new DataOutputStream(new FileOutputStream("myfile"));
for (...)
os.writeInt(num);
Одна проблема и с объектом, и с потоком данных состоит в том, что write (int) записывает только один байт. Пожалуйста, используйте writeInt (int).