Javaには、サーバーによって受信されたデータを読み取るためのBufferedReaderのような別のオブジェクトがありますか?? サーバーは改行なしで文字列を送信し、クライアントはサーバーが接続を閉じるまで文字列を出力しないため Timeout (タイムアウトメッセージには改行があります!) 、クライアントが受信したすべてのメッセージとサーバーから送信されたタイムアウトメッセージを出力した後! 助けてくれてありがとう!!
4 に答える
メソッドを使用して改行で読み取るのではなく、メソッドを使用readLine()
して文字単位で読み取りますread()
。
for (int c = 0; (c = reader.read()) > -1;) {
System.out.print((char) c);
}
別のクラスを使用するように要求したので、その場合はScannerを試してみてください。これは通常、パターンに基づいて、または入力から推測された型によって入力を区切るために使用されます (たとえば、バイトごとのベースまたは int ごとのベース、またはそれらの組み合わせでの読み取り)。ただし、ユースケースをカバーするために、ここでも汎用の「リーダー」として使用できます。
サーバーから何かを読み取るときは、通信プロトコルに厳密に従う必要があります。たとえば、サーバーは HTTP サーバーまたは SMTP サーバーである可能性があり、送信前にデータを暗号化する可能性があり、一部のデータは異なる方法でエンコードされる可能性があります。
したがって、基本的には次のように質問する必要があります。どの種類のサーバーにアクセスしたいですか? バイトはどのように送信されますか? また、本当に必要なデータにすばやくアクセスできるように、他の誰かがバイトを解釈する作業を既に行っていますか?
HTTP サーバーの場合は、コードを使用できますnew URL("http://example.org/").openStream()
。次に、バイトのストリームを取得します。これらのバイトを文字、文字列、その他のものに変換する方法は別の作業です。
あなたは試すことができます
InputStream is = ... // from input
String text = IOUtils.toString(is);
改行なしで入力をテキストに変換します(元の改行も保持します)