Ну, если вы читаете документацию для Reader
/Writer
вы можете увидеть следующее объяснение:
Писатель класса - написать метод
Пишет один символ. Символ, который должен быть записан, содержит в 16 младших битах заданного целочисленного значения; старшие разряды 16 игнорируются.
И код просто делает:
public void write(int c) throws IOException {
synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[writeBufferSize];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
}
Таким образом, в случае Writer
, и, насколько я могу видеть, это могло бы быть сделано с типом char
данных.
С другой стороны, метод int read
несет ответственность за возврат символа или конца индикатора потока.
В документации сказано:
чтения Класс чтения Метод
характер чтения, как целое число в диапазоне от 0 до 65535 или -1, если конец потока был достигнут ,
Как таковой, необходим тип данных, который больше, чем просто символ, и в этом случае используется int.
И это реализуется следующим образом:
public int read() throws IOException {
char cb[] = new char[1];
if (read(cb, 0, 1) == -1)
return -1;
else
return cb[0];
}
Таким образом, это второй случай, оправдывает использование большего типа данных.
Причина, по которой они используют int в обоих классах, может быть просто вопросом согласованности.
... Потому что практически все в компьютере числовое, а числа здесь просто соответствуют символьным ординалам? – KeithS
wow, спасибо большое за все ваши быстрые ответы! Это очень помогло мне! – kwoebber