powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / BufferedReader, пропустить строку
10 сообщений из 35, страница 2 из 2
BufferedReader, пропустить строку
    #39833307
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
А причем тут что возвращает?
"Прочитать 100 символов в буфер" выше писал.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833308
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если предположить, что я считал посимвольно 100 символов и не нашел там конец строки, то мне надо перейти на следующую строку. А как это сделать? Переход в BufferedReader происходит при readLine(), а он вызывает ошибку
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833310
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А \r и \n имеют вполне конкретные коды. Удивительно, да?
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833313
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ГужановЕсли предположить, что я считал посимвольно 100 символов и не нашел там конец строки, то мне надо перейти на следующую строку. А как это сделать? Переход в BufferedReader происходит при readLine(), а он вызывает ошибкуда. Тогда читай по символьно до конца. Раз нельзя отбросить целиком невалидный файл. Парси его весь.
Цифры сюда дать 10 минут.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833343
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpllemingЕсли имеется ввиду где в jre готовая реализация то такой нет если неошибаюсь, придется руки испачкать и написать самому.готового чего? Найти символ в гиговом файле?

топикстартер спрашивает нет ли чтото вроде этого

Код: java
1.
while(line != null || !reader.lastState().isLineTooLong()){



найти символ подразумевает его искать т.е писать код алгоритма поиска.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833353
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
ОК
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833380
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за помощь.
Сделал так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
try {
        line = reader.readLine();
} catch (OutOfMemoryError e) {
	logger.error("Слишком большая строка " + counter);
	int symbol = reader.read()ж
	int i = 0;
	while(symbol != 10 && symbol != 13) {
		i++;
		symbol = reader.read();
	}
	logger.error("Длина строки " + i);
	line = reader.readLine();
	if(line != null && line.length() == 0)
	        line = reader.readLine();
}
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833414
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
+1
Только лучше не доводить до райзе по памяти.
Ну и цифры не дал. Жаль.
Удачи!
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833486
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов
Код: 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){
      // Обрабтка ошибки
   }
}


Несколько мыслей.

Предположительно. Файл который ты читаешь - не совсем текстовый.
Потому-как сломать мозг хипу можно реально ооооочень длинными строками.
По факту Java поддерживает индексацию символов до 2 млрд. Но беря во внимание
что BufferedReader внутри использует StringBuffer который может делать реаллокации.
А реаллокации требуют 2 * n памяти плюс хвостик на расширение. Тут возможны варианты
что не хватило не памяти. А не хватило временной памяти которая нужна буферному ридеру
для копирования староого символьного массива в новое место. Но это моё предположение.
Я не изучал как работает этот ридер.

Железное решение твоей проблемы - читать файл не построчно а посимвольно. И принимать
решение на каждый символ. Формировать строки. С пониманием предметной области.
...
Рейтинг: 0 / 0
BufferedReader, пропустить строку
    #39833493
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
}catch (OutOfMemoryError e){
      // Обрабтка ошибки
}


Так обычно не делают. Ошибка OOM не предполагает ее оперативного решения.
Она просто к сведению перед тем как исполнительная среда упадет. Обычно
если это происходит то память не удалось освободить и нет ресурсов на ее решение.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / BufferedReader, пропустить строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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