Строки считываются из стрима (сокета). Две возможные проблемы. Враг может сунуть в стрим огромную строку, и/или много строк, что вызовет переполнение памяти сервера.
Усл1. Каждая строка должна быть считана не более заданной длины строки (ЗДС). То что считано более ЗДС - пропустить.
Усл2. Из стрима должно быть считано не более заданной длины чтения стрима (ЗДЧС). После считывания ЗДЧС - ресет стриму.
Искал в стандартных классах - не нашел как поставить ограничения или узнать количества считанного в стримах .
BufferedReader.readLine() читает до бесконца. Без ограничений на длину строки.
Стримы и Ридеры тоже не имеют ни ограничений ни полей вроде readCount.
Можно конечно считать в буфер а потом его сунуть в другой Стрим/Ридер. Но если ЗДЧС будет большой, то надо большой буфер создавать.
Как элегантно решить?
Java Q: Ограничение стрима и строк по длине
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
-
- Пользователь
- Сообщения: 113
- Зарегистрирован: 24 сен 2003, 21:52
-
- Графоман
- Сообщения: 18705
- Зарегистрирован: 20 июл 2003, 09:16
- Откуда: Торонто
Я вообще-то яву знаю поверхностно. Но вот посмотрел в хелп BufferedReader, там есть на мой взгляд все необходимое.
Я бы следующую последовательность организовал:
1. mark(int readAheadLimit) - помечаем начало
2. read() - читаем посимвольно и одновременно считаем. Нашли конец строки? - откатываемся и читаем строку. Не нашли и достигли предела?
Делай, что считаешь нужным.
Я бы следующую последовательность организовал:
1. mark(int readAheadLimit) - помечаем начало
2. read() - читаем посимвольно и одновременно считаем. Нашли конец строки? - откатываемся и читаем строку. Не нашли и достигли предела?
Делай, что считаешь нужным.
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
-
- Пользователь
- Сообщения: 113
- Зарегистрирован: 24 сен 2003, 21:52
Будут ли множественные однобайтные read-ы сколько нибудь существенно влиять на перформанс?Marmot писал(а):Я бы в этом случае не использовал бы Readers, а читал бы обычные InputStreams read-ми, и парсил их на строки сам, чекая все условия в процессе.
Кода всего на пол-экрана, зато полный контроль...
-
- Графоман
- Сообщения: 18705
- Зарегистрирован: 20 июл 2003, 09:16
- Откуда: Торонто
- Vitaliy-2000
- Пользователь
- Сообщения: 72
- Зарегистрирован: 29 авг 2003, 03:27
- Откуда: Москва-Торонто
- Контактная информация:
а зачем однобайтные?MarkM писал(а):Будут ли множественные однобайтные read-ы сколько нибудь существенно влиять на перформанс?Marmot писал(а):Я бы в этом случае не использовал бы Readers, а читал бы обычные InputStreams read-ми, и парсил их на строки сам, чекая все условия в процессе.
Кода всего на пол-экрана, зато полный контроль...
читай в какой нибудь байтовый буффер приемлиемой для тебя длины
-
- Графоман
- Сообщения: 18705
- Зарегистрирован: 20 июл 2003, 09:16
- Откуда: Торонто
Не очень элегантное решение. Он же читает из сокета. Может быть много байт, может быть мало. ПО-твоему решению, пока этот буфер не закачается, возврата в программу не произойдет. В том то и дело, что длина наперед неизвестна. Мелкие буферы - много возни. Большой буфер - долго ждать возврата.Vitaliy-2000 писал(а): а зачем однобайтные?
читай в какой нибудь байтовый буффер приемлиемой для тебя длины
Я бы все-таки побайтово читал. Самое безопасное.
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Зачем однобайтные, читай в буфер среднего размера, 1К например, и скорость будет и памяти много не съешь...MarkM писал(а):Будут ли множественные однобайтные read-ы сколько нибудь существенно влиять на перформанс?Marmot писал(а):Я бы в этом случае не использовал бы Readers, а читал бы обычные InputStreams read-ми, и парсил их на строки сам, чекая все условия в процессе.
Кода всего на пол-экрана, зато полный контроль...
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
-
- Графоман
- Сообщения: 18705
- Зарегистрирован: 20 июл 2003, 09:16
- Откуда: Торонто