В файле Java
, имеющем файл 335Gb
размер, который содержит отдельные номера в каждой строке, мне нужно прочитать его по строке, как если бы это был поток чисел - я не должен хранить все данные в памяти. Мне сказали, что класс Scanner
не будет работать. Не могли бы вы порекомендовать наилучший способ сделать это?Прочитайте огромный файл чисел на Java в режиме экономии памяти?
ответ
Ни один из классов потока ввода java.io не «сохранил все данные в памяти». Я думаю, что вы можете выбрать то, что лучше для вас, например BufferedReader или DataInputStream и т. Д.
плюс один, и сканер –
Если вы используете BufferedReader, вы сможете получить до 90 МБ/с в одном потоке.
Вы можете использовать трюк, чтобы разбить файл и прочитать часть данных одновременно, но это поможет только в том случае, если ваш считываемый вами диск высок.
Например, вы можете карта памяти 335 ГБ в память сразу без использования кучи. Это будет работать, даже если у вас есть доля этого объема основной памяти.
Какова скорость передачи данных, которую вы можете получить с помощью вашей дисковой подсистемы?
Почему ссылка на жесткое число 90 МБ/с? Моя система, конечно, позволяет больше, другие могут быть медленнее. Я сомневаюсь, что любой трюк ускорит задачи так просто, как описано. – Holger
@Holger 90 МБ/с предназначен для типичного быстрого процессора. Если есть запасная пропускная способность чтения, использование файлов с отображением памяти и нескольких потоков может помочь достичь максимальной пропускной способности чтения. например Я превысил 1,2 ГБ/с, используя SSD и файлы с отображением памяти. –
Многопоточность вряд ли ускорит ввод-вывод, который идет последовательно, хотя одна шина. Если вы говорите о 1,2 Гбайт/с, тогда синтаксический анализ чисел параллельно может действительно улучшить хотя бы, но на самом деле это доказывает, что в вашей системе ввод-вывод - это * не * узкое место. Поэтому я не считаю, что одна и та же система разрешает только 90 Мбайт/с при использовании «BufferedReader» ... – Holger
- 1. Прочитайте огромный файл матрицы в C
- 2. Прочитайте огромный файл с диска
- 3. Методы экономии памяти Java?
- 4. Прочитайте огромный текстовый файл в C++
- 5. Прочитайте Огромный файл Excel (строки 500K) в java
- 6. Прочитайте огромный файл tar.gz, похожий на поток, строка за строкой
- 7. Bitmap.Save, огромный утечка памяти
- 8. python сделать огромный файл в памяти
- 9. Прочитайте несжатые файлы экономии в искры
- 10. Как сжимать-to-fit std :: vector в режиме экономии памяти?
- 11. Pickle dump огромный файл без ошибки памяти
- 12. Показать огромный файл в GUI
- 13. Maven компилирует огромный файл Java
- 14. Nump nditer для экономии памяти?
- 15. Ошибка памяти: огромный битмап
- 16. CGContextDrawImage огромный пик памяти
- 17. Как читать огромный HTML-файл в Java?
- 18. Прочитайте огромный столбец Excel с C#
- 19. Огромный утечек памяти в CGMutablePathRef
- 20. Огромный пик памяти - CGContextDrawImage
- 21. Как разбить огромный текстовый файл в python
- 22. Огромный объем памяти с ARC
- 23. Прочитайте длинную строку в памяти
- 24. symfony огромный файл скачать
- 25. Загрузите огромный файл в память
- 26. xml_parse огромный файл PHP
- 27. Как читать огромный файл на Java, в кусках без блокировки?
- 28. Python: как читать огромный текстовый файл в памяти
- 29. 2D массив представляет собой огромный питон Dict, координатно как решение для экономии памяти
- 30. как создать огромный json-файл
Используйте 'BufferedReader'. –
335 gb? это огромный ... можете ли вы опубликовать некоторые примеры данных, чтобы узнать, можем ли мы адаптировать наше решение к формату данных? – Arkantos
Почему сканер не работает? Кстати, я предполагаю, что вы имеете в виду 335 GB = Giga-byte вместо Gb = giga-bit. –