通过Java中的套接字从BufferedReader读取常量字符数

时间:2013-06-21 05:50:52

标签: java sockets bufferedreader

我在Java中设置了一个套接字客户端,并使用BufferedReader读取数据。我知道reader.readLine()方法将从流中读取一行输入。但是,我想在字符串中读取一定数量的字符,或者直到流的末尾,而不管读取的数据的内容是什么。

例如:

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

1 个答案:

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