Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the character returned by read() in BufferedReader

How can I convert an integer returned by the read() in a BufferedReader to the actual character value and then append it to a String? The read() returns the integer that represents the character read. How when I do this, it doesn't append the actual character into the String. Instead, it appends the integer representation itself to the String.

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
}

What should I do to get the actual data read?

like image 737
Carven Avatar asked Oct 14 '11 17:10

Carven


3 Answers

Just cast c to a char.

Also, don't ever use += on a String in a loop. It is O(n^2), rather than the expected O(n). Use StringBuilder or StringBuffer instead.

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();
like image 142
ILMTitan Avatar answered Nov 12 '22 13:11

ILMTitan


you could also read it into a char buffer

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

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

this will be more efficient than reading char per char

like image 5
ratchet freak Avatar answered Nov 12 '22 11:11

ratchet freak


Cast it to a char first:

response += (char) c;

Also (unrelated to your question), in that particular example you should use a StringBuilder, not a String.

like image 4
Lawrence Kesteloot Avatar answered Nov 12 '22 11:11

Lawrence Kesteloot