繁体   English   中英

从套接字读取所有数据

[英]Read all data from socket

我想同步读取所有数据,而不readline() java中的readline()方法readline()或C ++中的readall()从客户端或服务器接收。
我不想使用类似下面的代码:

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

我应该使用哪种方法?

如果您知道传入数据的大小,则可以使用类似以下方法:

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

其中cbuf是目标缓冲区。

否则 ,您将不得不读取行或读取字节。 流不知道传入数据的大小。 只能顺序读取,直到到达结束为止(read方法返回-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();
}

您可以使用如下形式:

   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();
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM