我希望同步读取所有数据,从客户端或服务器接收,而不使用java中的readline()
方法(如c ++中的readall()
)。
我不想使用下面的代码:
BufferedReader reader = new BufferedReader(new inputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
document.append(line + "\n");
我应该使用什么方法?
答案 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();
}