У меня есть массив символов, который может содержать максимум 50000 символов за раз. Содержимое этого массива происходит через соединения сокетов. Однако не гарантируется, что этот буфер символов не будет иметь никаких пустых элементов. Затем мне нужно преобразовать этот массив символов в String (например, новый String (buffer);). Мой вопрос: всякий раз, когда я получаю буфер из сокета длиной не 50000, как вы удаляете оставшиеся или пустые элементы из этого массива символов или этой строки? Если нет, то какой самый эффективный способ вы бы предложили?Удаление всех пустых элементов из массива символов
/Вот текущая реализация/
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 длинных байт, то мне нужно чтобы удалить оставшиеся элементы массива)
Почему вы читаете его в массиве, читаете его прямо в строке? –
Я не могу использовать для этого функцию .readLine(). Мне нужно использовать is.read() и назначить содержимое массиву – 2013-03-14 09:56:57