我有一个字符数组,一次最多可以容纳 50000 个字符。该数组的内容是通过套接字连接来的。但是,不能保证该字符缓冲区不会有任何空元素。然后我需要将此字符数组转换为字符串(例如 new String(buffer);)。我的问题是,每当我从套接字收到长度不超过 50000 的缓冲区时,如何从此 char 数组或此 String 中删除剩余或空元素?如果没有,您建议最有效的方法是什么?
/这是当前的实现/
private BufferedReader is;
//Other code
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
is.read(buffer);
return new String(buffer);
}
////// 这是使用 ByteArrayOutputStream 的实现
public String readAuth() throws IOException {
int s;
ByteArrayOutputStream bao = new ByteArrayOutputStream();
while ((s = is.read()) != -1) {
bao.write(s);
if (!is.ready())
break;
}
if (s == -1) {
return null;
}
String result = bao.toString();
return result;
}
当我需要读取大量数据时,这种实现速度非常慢。
- - - - - - - - -编辑
(例如,服务器向我发送数据,但它可能并不总是 50000 长字节,而是 32822 长字节,那么我需要删除剩余的数组元素)
正确的读取方法InputStream
缓冲区中的内容如下。
public String readBufferUpdate() throws IOException {
char[] buffer =new char[50000];
int bytesRead = is.read(buffer, 0, buffer.length);
return new String(buffer, 0, bytesRead);
}
在这里你is.read()
返回已读入的字节数bytesRead
。仅将那么多字节从缓冲区复制到String
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)