powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / BufferedReader, пропустить строку
25 сообщений из 35, страница 1 из 2
BufferedReader, пропустить строку
    #39833211
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Для чтения строк из файла большого размера использую BufferReader.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
BufferedReader reader = new BufferedReader(                     
            		new InputStreamReader(                             
            				new FileInputStream(pathToFile), charset));

String line = reader.readLine();
while(line != null){
   // обработка строки
   .....
   try{
      line = reader.readLine();
   }catch (OutOfMemoryError e){
      // Обрабтка ошибки
   }
}


На одной из строк ловлю OutOfMemoryError.
Проверяю, вижу, что эта строка в файле некорректная, и имеет огромную длину, так что OutOfMemory вполне логичен.
Думаю, что правильнее всего будет в секции catch перейти на следующую строку, чтобы продолжить обработку файла.
Но никак не могу сделать этот переход, у BufferReader для перехода на следующую строку есть только метод readLine(), а он опять пытается прочитать ту же строку, и опять ловит OutOfMemory.
BufferReader использую потому, что он нормально и быстро работает с большими файлами, и ему можно указать кодировку файла.

Подскажите, как мне решить проблему?
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833225
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ГужановДумаю, что правильнее всего будет в секции catch перейти на следующую строку, чтобы продолжить обработку файла.может тогда не читать построчно а ПРЕДВАРИТЕЛЬНО узнавать размер строк?
Это от бизнес логики зависит.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833239
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант:
- у оси спрашиваете размер.
- посчитали нужную память для целиком в память. Либо поиск конца строки в цикле и имеем размер строк
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833242
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В файле строки разные по длине.
Искать конец строки - не вариант, файл может быть в несколько гигабайт, миллионы строк. И имеются требования по быстродействию
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833243
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
То есть нужно быстро, но с пропусками так как памяти мало. Так?
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833245
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, если проблемная строка, то ее пропустить, записав информацию в лог
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833252
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ГужановДа, если проблемная строка, то ее пропустить, записав информацию в логчитай с начальной позиции Следующая. Но для этого надо знать размпр проблемной.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833254
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предполагаю, что размер проблемной строки может быть любым.
Единственное, что может быть можно использовать - мне известен максимальный возможный размер правильной строки
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833256
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ГужановПредполагаю, что размер проблемной строки может быть любым.я намекал что без поиска конца строки по спецсимволу и выхода на размер проблемной НЕ ВЫЙДЕТ.
ИМХО
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833257
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но получаю строку я в line = reader.readLine(), ловлю ошибку, и ридер не переходит на следующую строку. В catch я вижу, что в line осталась предыдущая строка, которая корректна. Если я в catch пытаюсь пойти дальше (line = reader.readLine(), то опять получаю ту же ошибку.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833258
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если имеется ввиду где в jre готовая реализация то такой нет если неошибаюсь, придется руки испачкать и написать самому.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833262
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Думаю поиск в тексте будет несравнимо быстрее чем логика обработки.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833263
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ГужановНо получаю строку я в line = reader.readLine(), ловлю ошибку, и ридер не переходит на следующую строку. В catch я вижу, что в line осталась предыдущая строка, которая корректна. Если я в catch пытаюсь пойти дальше (line = reader.readLine(), то опять получаю ту же ошибку.позиция не сменилась так как не прочитано. Что удивляет?
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833264
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingЕсли имеется ввиду где в jre готовая реализация то такой нет если неошибаюсь, придется руки испачкать и написать самому.готового чего? Найти символ в гиговом файле?
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833266
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Не удивляет. Просто говорю, что я эту строку не получил, поэтому с ее размером играться не могу
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833267
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ловить outofmemory стремно.
екстенднуть bufferedreader и сделать свой readLine с лимитом по длине строки.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833275
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ГужановPetroNotC Sharp,

Не удивляет. Просто говорю, что я эту строку не получил, поэтому с ее размером играться не могуеще раз.
Алгоритм такой что нужно искать конец строки прежде чем читать в память.
Понял?
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833283
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
Это я понял. Но вот никак не могу придумать, как это реализовать. Ведь если строка не в памяти, то как с ней манипулировать?
Если же я ее прочитаю (reader.readLine()), то получу outOfMemory
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833285
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Если нет indexOf("\n
То циклом искать.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833286
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Есть метод read по символьный. Дай сюда скорость прохода по всему файлу.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833288
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по файлу в 1300000 строк (файл для отладки, реальный больше) с обработкой и сохранением строк в БД тратится примерно 2.5 - 3 минуты
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833290
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indexOf("\n") надо искать в строке. А у меня этой строки нет, т.к. вылетаю с ошибкой
Если все строки читать посимвольно, то, есть опасение, что я зависну совсем надолго
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833294
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
1. Дай скорость посимвольного чтения БЕЗ ВСЕГО.
2. ПЕРЕД reaLine прочти в буфер 100 символов и там ищи конец строки.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833295
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов1300000 строк3. Валидируй в фоне файлы на входе.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833303
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод read() возвращает число
The character read, as an integer in the range 0 to 65535 (0x00-0xffff), or -1 if the end of the stream has been reached
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / BufferedReader, пропустить строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]