0

我已经在 J​​ava 中设置了一个套接字客户端,并且正在使用BufferedReader. 我知道该reader.readLine()方法将从流中读取一行输入。但是,我想将恒定数量的字符读入字符串,或者直到流结束,而不管读取的数据内容如何。

例如:

BufferedReader reader = ...
String data = /* next 1024 characters from the stream */
4

1 回答 1

2

您需要将读取过程放入循环中...

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);
于 2013-06-21T05:55:37.780 回答