views:

93

answers:

1

Hi,

I've this code:

InputStream is = socket.getInputStream();
int b;
while ((b = is.read()) != -1)
{
   System.out.println(b);
}

A byte its range is -128 until +127.
But one of the printed bytes is 210.

Is this the result of converting the read byte to an int?
(So that the negatif byte becomes a positif int)
If so, can I do the same (with an OutputStream) by converting an int to a byte?

Thanks,
Martijn

+6  A: 

Actually read returns an integer..

public abstract int read() throws IOException

so it's implictly casted to be unsigned byte by storing it in an int.

As stated in documentation:

Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned.

Think about the fact that if it's a signed byte then -1 couldn't be used as end of stream value.

For OutputStream you have

public abstract void write(int b) throws IOException

and as stated by documentation implementation will take 8 low order bits of the integer passed..

Jack
Thanks. By waiting a few minutes, you answered all my question.Now your answer is complete. Thank you!
Martijn Courteaux