Question

From the API the method write(int byte) should take an int representing a byte so in that way it when EOF comes it can return -1. However it's possible doing the following thing:

FileOutputStream fi = new FileOutputStream(file);
    fi.write(100000);

I expected to not compile as the number exceeds the byte range. How does the JVM interpret it exactly? Thanks in advance.

Was it helpful?

Solution

From the OutputStream.write(int) doc:

Writes the specified byte to this output stream. The general contract for write is that one byte is written to the output stream. The byte to be written is the eight low-order bits of the argument b. The 24 high-order bits of b are ignored.

Emphasis mine.

Note that the method takes an int. And since 100000 is a valid integer literal, there is no point of it being not compiling.

OTHER TIPS

Where did you read that part about EOF and -1?

The method just writes one byte, which for some reason is passed along as an int.

Writes the specified byte to this output stream. The general contract for write is that one byte is written to the output stream. The byte to be written is the eight low-order bits of the argument b. The 24 high-order bits of b are ignored.


I expected to not compile as the number exceeds the byte range

No, this will compile okay. The compiler just looks for an int. (A long would not compile).

Everything except the lowest 8 bits will be ignored.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top