Кажется, здесь есть несколько путей отказа в обслуживании.
Огромная большая линия, которая сожирает память. Вероятно, самым простым является использование MeteredInputStream
до того, как даже начнется декодирование символов. Чтение char
по char
будет чрезвычайно медленным при любых обстоятельствах. Вы можете читать длинные char[]
за один раз, но это, вероятно, слишком усложнит код.
Работа с злоумышленником (или багом), поддерживающим много соединений одновременно. Вы, вероятно, хотите, чтобы неблокирующий ввод-вывод читал все сообщение, а затем продолжал нормально.