2011-01-15 5 views
1

In Java gibt es ein anderes Objekt wie BufferedReader, um Daten zu lesen, die vom Server empfangen werden? Da der Server eine Zeichenfolge ohne Zeilenumbruch sendet und der Client keine Zeichenfolge ohne den Server druckt, schließen Sie das Verbindungsformular Timeout (die Zeitlimitnachricht hat einen Zeilenumbruch!), Nachdem der Client alle Nachrichten empfangen und die Zeitüberschreitungsmeldung vom Server gesendet wurde ! hilf mir danke !!BufferedReader, anderes Objekt, um eine Zeichenfolge zu erhalten

+2

Hier ist die Java API tun: http://java.sun.com/ javase/6/docs/api/- lernen, wie man es benutzt. –

+2

Michael, das ist nicht sehr hilfreich. Die Annäherung an eine ganze Klassenbibliothek oder ein Framework kann ziemlich entmutigend sein. Und wenn alles, was Sie jemals getan haben, eine kleine Textdatei oder Konsolen-I/O war (nicht unbegründet für Anfänger-Programmieraufgaben), dann ist BufferedReader wirklich das einzige, was sie wissen (und hey, es hat eine readLine() -Methode, die definitiv praktisch ist). – Joey

+2

Joey: während Michaels Kommentar wahrscheinlich in der Natur snarky war, ist sein Ratschlag vernünftig. Jeder, der Java beherrscht, weiß, wie er sich in der Java-API zurecht findet und sie als erste Quelle benutzt, sobald sie ähnliche Fragen haben. Zu lernen, wie man Dinge in der Java-API findet, ist von größter Bedeutung. Java ist gesegnet, dass es auch eines der besten API-Dokumente gibt. – whaley

Antwort

1

Wenn Sie etwas von einem Server lesen, müssen Sie das Kommunikationsprotokoll strikt befolgen. Zum Beispiel könnte der Server ein HTTP-Server oder ein SMTP-Server sein, er könnte die Daten vor dem Senden verschlüsseln, einige der Daten könnten anders kodiert sein und so weiter.

Also sollten Sie grundsätzlich fragen: Auf welche Art von Server möchte ich zugreifen? Wie sendet es mir die Bytes? Und hat schon jemand anders die Bytes interpretiert, damit ich schnell zu den Daten komme, die ich wirklich will?

Wenn es sich um einen HTTP-Server handelt, können Sie den Code new URL("http://example.org/").openStream() verwenden. Dann erhalten Sie einen Strom von Bytes. Wie Sie diese Bytes in Zeichen, Strings und andere Dinge konvertieren, ist eine andere Aufgabe.

2

Lesen Sie einfach nicht durch Zeilenumbrüche mit readLine() Methode, aber lesen Char-by-Char mit read() Methode.

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

Sie bat um eine andere Klasse zu verwenden, so dass in diesem Fall Scanner dafür versuchen. Es wird üblicherweise zum Abgrenzen von Eingaben auf der Grundlage von Mustern oder von den Typen verwendet, die von der Eingabe abgeleitet werden (z. B. Lesen auf einer Byte-für-Byte-Basis oder einer Int-für-Int-Basis oder einer Kombination davon). Sie können es jedoch auch hier als einen allgemeinen "Leser" verwenden, um Ihren Anwendungsfall abzudecken.

0

Sie könnten versuchen,

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

schaltet den Eingang in den Text, ohne auf neue Zeilen (es original newlines bewahrt auch)