Как читать строку с эхом в Java?

Я хотел бы использовать BufferedReader с видом readLine() (или аналогичным), который может возвращать эхо для каждого нажатия клавиши.

Это для удаленного терминала. Другой способ спросить, как реализована консоль в java.

Это то, что пришло на ум, но это слишком уродливо. Есть ли известная библиотека, которая реализует что-то подобное?

while(condition) {

    nByteRead = in.read(buffer);

    if (nByteRead != -1) {

        //  ECHO
        out.write(buffer, 0, bytes_read);                      

        //  read bytes till NEW_LINE...                            
        //  etc...!                            
    }                           
}                    

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

Спасибо за любую подсказку!


person Hernán Eche    schedule 01.09.2011    source источник


Ответы (2)


Большинство терминалов, включая терминалы по умолчанию в Ubuntu и Windows (я полагаю), не будут передавать символы в JVM, пока пользователь не нажмет return. (То есть, он буферизуется на основе полной строки на более низком уровне в системе.)

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

Похожий вопрос:

(отказ от ответственности, я не совсем уверен, что правильно понял ваш вопрос.)

person aioobe    schedule 01.09.2011
comment
Я думаю, вы поняли, но я не хочу читать из терминала, я хочу читать из сокета, отправляя эхо пользователю, чтобы он увидел, что то, что печатается, достигло сервера. - person Hernán Eche; 01.09.2011
comment
Клиент написан на java? - person aioobe; 01.09.2011
comment
Нет, клиент не обязательно Java - person Hernán Eche; 01.09.2011

Есть:

person Bart Kiers    schedule 01.09.2011
comment
Я попробую JLine, но я вижу, что он использует некоторую dll и работает по-разному для Windows и Linux. Я вижу, что нет стандартного способа Java сделать это, поэтому, возможно, я напишу код вручную, спасибо. - person Hernán Eche; 01.09.2011