我已经在 Java 中设置了一个套接字客户端,并且正在使用BufferedReader
. 我知道该reader.readLine()
方法将从流中读取一行输入。但是,我想将恒定数量的字符读入字符串,或者直到流结束,而不管读取的数据内容如何。
例如:
BufferedReader reader = ...
String data = /* next 1024 characters from the stream */
我已经在 Java 中设置了一个套接字客户端,并且正在使用BufferedReader
. 我知道该reader.readLine()
方法将从流中读取一行输入。但是,我想将恒定数量的字符读入字符串,或者直到流结束,而不管读取的数据内容如何。
例如:
BufferedReader reader = ...
String data = /* next 1024 characters from the stream */
您需要将读取过程放入循环中...
StringBuilder data = new StringBuilder(128);
String text = null;
while ((text = reader.readLine()) != null) {
data.append(text).append("\n"); // if you're interested in the new line character
}
return data.toString();
您的recv
方法应该抛出IOException
,因为处理这些错误(恕我直言)并不完全取决于此方法
更新
如果您不能保证该行将被新行终止,则需要从中读取每个值...
StringBuilder data = new StringBuilder(128);
int charsIn = -1;
char buffer = new char[1024];
while ((charsIn = reader.read(buffer)) > -1) {
data.append(buffer, 0, charsIn);
}
return data;
现在,问题是,流实际上不会结束,因为它在Socket
流的上下文中没有意义(在关闭之前它没有结束)。
在这里,发送者必须发送终止字符以允许您中断循环。
更新
char buffer = new char[1024];
// This will read UP TO 1024 characters from buffer into the
// character array, starting at position 0.
// This may read less then 1024 characters if the underlying
// stream returns -1 indicating and end of stream from
// the read method
int charsIn = reader.read(buffer, 0, 1024);
StringBuilder data = new StringBuilder(charsIn);
data.append(buffer, 0, charsIn);