2011-01-15 2 views
1

В java есть еще один объект, например BufferedReader для чтения данных, полученных сервером? Поскольку сервер отправляет строку без новой строки, а клиент не печатает какую-либо строку, она не закрывает сервер, закрывая форму соединения. Тайм-аут (сообщение с тайм-аутом имеет новую строку!), После того, как клиент распечатает все полученные сообщения и отправит сообщение таймаута сервером ! помогите мне спасибо!BufferedReader, другой объект, чтобы получить строку

+2

Вот Java API делают: http://java.sun.com/ javase/6/docs/api/- узнайте, как его использовать. –

+2

Майкл, это не слишком полезно. Приближение к целой библиотеке или структуре классов может быть довольно сложным. И если все, что вы когда-либо делали, было небольшим текстовым файлом или консольным вводом-выводом (не необоснованным для начинающих задач программирования), то BufferedReader действительно может быть единственным, что они знают (и, эй, у него есть метод readLine(), который определенно удобен). – Joey

+2

Joey: в то время как комментарий Майкла был, пожалуй, злобным в природе, его совет звучит. Каждый, кто владеет Java, знает, как найти свой путь вокруг Java API и использовать его в качестве своего первого источника в тот момент, когда у вас есть вопрос схожий с вашим характером. Изучение того, как найти вещи в Java API, имеет первостепенное значение. Java благословляется тем, что есть один из лучших наборов документа API. – whaley

ответ

1

Когда вы читаете что-либо с сервера, вы должны строго следовать протоколу связи. Например, сервер может быть HTTP-сервером или SMTP-сервером, он может шифровать данные перед их отправкой, некоторые данные могут быть закодированы по-разному и так далее.

Итак, вы должны в основном спросить: на каком сервере я хочу получить доступ? Как он отправляет мне байты? И кто-то еще уже проделал работу по интерпретации байтов, чтобы я мог быстро добраться до данных, которые я действительно хочу?

Если это HTTP-сервер, вы можете использовать код new URL("http://example.org/").openStream(). Затем вы получите поток байтов. Как вы конвертируете эти байты в символы, строки и другие вещи, это еще одна задача.

2

Просто не читайте строки новой строки, используя метод readLine(), но читайте char-by-char, используя метод read().

for (int c = 0; (c = reader.read()) > -1;) { 
    System.out.print((char) c); 
} 
2

Вы просили другого класса, чтобы использовать, так что в этом случае дать Scanner попробовать для этого. Он обычно используется для разграничения ввода на основе шаблонов или типов, выводимых из ввода (например, чтение по байтовым байт-базам или по принципу int-by-int или их комбинация). Тем не менее, вы можете использовать его как просто универсальный «читатель» здесь, чтобы охватить ваш вариант использования.

0

Вы можете попробовать

InputStream is = ... // from input 
String text = IOUtils.toString(is); 

превращает ввод в текст, не без переноса строк (он сохраняет оригинальные переводы строк, а)