从套接字读取所有数据

时间:2013-07-12 11:58:01

标签: java sockets asynchronous

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

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

我应该使用什么方法?

2 个答案:

答案 0 :(得分:4)

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

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

其中cbuf是目标缓冲区。

否则,您必须读取行或读取字节。流不知道传入数据的大小。只能顺序读取直到达到结束(读取方法返回-1)

请参阅此处streams doc

是这样的:

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

答案 1 :(得分: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();
   }