4

すべてのデータを同期的に読み取りreadline()、Java のメソッドなしでクライアントまたはサーバーから受信します ( readall()C++ のように)。
以下のコードのようなものを使用したくありません。

BufferedReader reader = new BufferedReader(new inputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
     document.append(line + "\n");

どのような方法を使用すればよいですか?

4

3 に答える 3

6

受信データのサイズがわかっている場合は、次のような方法を使用できます。

public int read(char cbuf[], int off, int len) throws IOException;

ここで、cbuf は宛先バッファーです。

それ以外の場合は、行を読み取るか、バイトを読み取る必要があります。ストリームは受信データのサイズを認識しません。は、最後に到達するまでのみシーケンシャルに読み取ることができます (読み取りメソッドは -1 を返します)。

ここでストリームのドキュメントを参照してください

そのように:

public static String readAll(Socket socket) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null)
        sb.append(line).append("\n");
    return sb.toString();
}
于 2013-07-12T12:04:28.253 に答える
1

次のようなものを使用できます。

   public static String readToEnd(InputStream in) throws IOException {
      byte[] b = new byte[1024];
      int n;
      StringBuilder sb = new StringBuilder();
      while ((n = in.read(b)) >= 0) {
         sb.append(b);
      }
      return sb.toString();
   }
于 2014-01-09T10:56:55.273 に答える