简体   繁体   中英

Java: InputStream read() returns a byte bigger than 127?

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

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..

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM