Получение символа, возвращаемого read() в BufferedReader

Как я могу преобразовать целое число, возвращаемое read() в BufferedReader, в фактическое значение символа, а затем добавить его в строку? read() возвращает целое число, представляющее прочитанный символ. Как, когда я это делаю, он не добавляет фактический символ в строку. Вместо этого он добавляет само целочисленное представление к строке.

int c;
String result = "";

while ((c = bufferedReader.read()) != -1) {
    //Since c is an integer, how can I get the value read by incoming.read() from here?
    response += c;   //This appends the integer read from incoming.read() to the String. I wanted the character read, not the integer representation
}

Что я должен сделать, чтобы получить фактические данные?


person Carven    schedule 14.10.2011    source источник


Ответы (3)


Просто примените c к char.

Кроме того, никогда не используйте += на String в цикле. Это O (n ^ 2), а не ожидаемое O (n). Вместо этого используйте StringBuilder или StringBuffer.

int c;
StringBuilder response= new StringBuilder();

while ((c = bufferedReader.read()) != -1) {
    // Since c is an integer, cast it to a char.
    // If c isn't -1, it will be in the correct range of char.
    response.append( (char)c ) ;  
}
String result = response.toString();
person ILMTitan    schedule 14.10.2011
comment
@JoeBlow Спасибо за добрый комментарий. Что касается вашего редактирования, я чувствую, что закрытие читалки является обязанностью того, кто ее создал. Поскольку мы не видим творение читателя, закрытие его здесь неуместно и выходит за рамки ответа. - person ILMTitan; 06.01.2017

вы также можете прочитать его в буфер символов

char[] buff = new char[1024];
int read;
StringBuilder response= new StringBuilder();
while((read = bufferedReader.read(buff)) != -1) {

    response.append( buff,0,read ) ;  
}

это будет более эффективно, чем чтение char за char

person ratchet freak    schedule 14.10.2011

Сначала приведите его к символу:

response += (char) c;

Кроме того (не связанный с вашим вопросом), в этом конкретном примере вы должны использовать StringBuilder, а не String.

person Lawrence Kesteloot    schedule 14.10.2011