Считывание данных из файла java

Считывание данных из файла java

В предыдущем примере было показано, как записать Java объект в файл. Настало время узнать, как прочитать Java объект из файла.

Процесс восстановления состояния сохраненного объекта из файла называется десериализацией. Упрощенно процедура десериализации объекта выглядит следующим образом:

Пример записи объекта в файл

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

кажется, есть разные способы чтения и записи данных из файлов в Java.

Я хочу прочитать данные ASCII из файла. Каковы возможные пути и их различия?

24 ответов

ASCII-это текстовый файл, поэтому вы будете использовать читателей для чтения. Java также поддерживает чтение из двоичного файла с помощью InputStreams. Если считываемые файлы огромны, вы захотите использовать командой bufferedreader на FileReader для улучшения производительности.

пройти в этой статье о том, как использовать Reader

Я также рекомендую вам скачать и прочитать эту замечательную (пока бесплатно) забронировать называется Мышление На Java

В Java 7:

В Java 8:

мой любимый способ чтения небольшого файла-использовать BufferedReader и StringBuilder. Это очень просто и по существу (хотя и не особенно эффективно, но достаточно хорошо для большинства случаев):

некоторые указали, что после Java 7 Вы должны использовать try-with-resources (т. е. автоматическое закрытие) особенности:

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

хотя, если я хочу на самом деле просто прочитать файл в строку, я всегда использую Apache Commons IO С классом IOUtils.метод toString. Вы можете посмотреть на источник здесь:

и еще проще с Java 7:

самый простой способ-использовать Scanner класс в Java и объект FileReader. Простой пример:

Читайте также:  Как смонтировать образ игры iso

Scanner имеет несколько методов для чтения в строках, числах и т. д. Дополнительную информацию об этом можно найти на странице документации Java.

например, чтение всего содержимого в String :

кроме того, если вам нужна конкретная кодировка вы можете использовать это вместо FileReader :

вот простое решение:

вот еще один способ сделать это без использования внешних библиотек:

Я должен был проверить разные способы. Я прокомментирую свои выводы, но, короче говоря, самый быстрый способ-использовать простой старый BufferedInputStream над FileInputStream. Если необходимо прочитать много файлов, то три потока сократят общее время выполнения примерно до половины, но добавление большего количества потоков будет постепенно снижать производительность, пока не займет в три раза больше времени для завершения двадцати потоков, чем только с одним потоком.

предполагается, что вы должны прочитать файл и сделать что-то значимое с его содержанием. В примерах здесь читаются строки из журнала и подсчитываются те, которые содержат значения, превышающие определенный порог. Поэтому я предполагаю, что однострочный Java 8 Files.lines(Paths.get("/path/to/file.txt")).map(line -> line.split(";")) — это не вариант.

Я тестировал на Java 1.8, Windows 7 и SSD и HDD дисках.

Я написал шесть различных реализаций:

rawParse: используйте BufferedInputStream над FileInputStream, а затем вырезать строки чтения байт за байтом. Это превзошло любой другой однопоточный подход, но это может быть очень неудобно для файлов, отличных от ASCII.

lineReaderParse: используйте BufferedReader над FileReader, читайте строку за строкой, разделяйте строки, вызывая строку.расщеплять.)( Это примерно на 20% медленнее, чем rawParse.

lineReaderParseParallel: это то же самое, что lineReaderParse, но он использует несколько потоков. Это самый быстрый вариант в целом случаи.

nioFilesParse: используйте java.НИО.файлы.Файлы.lines ()

nioAsyncParse: используйте асинхронный канал с обработчиком завершения и пулом потоков.

Читайте также:  Как создать страницу в группе вконтакте

nioMemoryMappedParse: используйте файл, сопоставленный с памятью. Это действительно плохая идея, дающая время выполнения по крайней мере в три раза больше, чем любая другая реализация.

это среднее время для чтения 204 файлов по 4 МБ каждый на четырехъядерный i7 и SSD-накопитель. Файлы создаются на лету, чтобы избежать кэширования диска.

Я нашел разницу меньше, чем я ожидал, между запуском на SSD или жестком диске SSD примерно на 15% быстрее. Это может быть связано с тем, что файлы генерируются на нефрагментированном HDD, и они читаются последовательно, поэтому вращающийся диск может работать почти как SSD.

Я был удивлен низкой производительностью реализации nioAsyncParse. Любой Я реализовал что-то неправильно или многопоточная реализация с использованием NIO, а обработчик завершения выполняет то же самое (или даже хуже), что и однопоточная реализация с java.IO API. Кроме того, асинхронный синтаксический анализ с CompletionHandler намного длиннее в строках кода и сложнее реализовать правильно, чем прямая реализация на старых потоках.

теперь шесть реализаций, за которыми следует класс, содержащий их все, плюс параметризуемый метод main() это позволяет играть с количеством файлов, размером файла и степенью параллелизма. Обратите внимание, что размер файлов варьируется плюс минус 20%. Это позволяет избежать какого-либо эффекта из-за того, что все файлы одинаковы размер.

rawParse

lineReaderParse

lineReaderParseParallel

nioFilesParse

nioAsyncParse

ПОЛНАЯ RUNNABLE РЕАЛИЗАЦИЯ ВСЕХ Дела

В статье рассказывается как считать и записать данные из файла под Java в IntelliJ IDEA на примере программы сложения двух чисел.

11.10.2015 2 комментария 18 681 просмотров

В статье рассказывается как считать и записать данные из файла под Java в IntelliJ IDEA на примере программы сложения двух чисел.

Читайте также:  Как убрать автономный режим в стиме

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

Рассматривать я буду очень простой способ чтения из файла и записи в файл, чтобы код занимал минимум места, так как на тех же олимпиадах времени на написание «правильного» кода мало. Разумеется, что в практических приложениях надо будет предусмотреть множество проверок, обработок исключений и др.

Содержание

Создание проекта

Создайте пустое консольное приложение с именем, например, ReadWriteInFiles . Если вы не помните, как это сделать, то посмотрите в статье Создание пустого консольного приложения

Ссылка на основную публикацию
Adblock detector