문제

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.

도움이 되었습니까?

해결책

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.

다른 팁

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top