2012-03-17 2 views
0

В InputStream классе java.io. * пакет:Как байты хранятся в целом

INT чтение() бросает IOException

чтение() возвращает байты, как это находится в классе потокового , но он сохраняется в целочисленном виде без каких-либо ошибок.

Почему это так? и как это происходит. Помогите мне дизайн распределения памяти также

+1

технически «байт» не имеет знака, тогда как «байт» Java подписан. Таким образом, хотя это «байт», как в 8-битах, он не является байтом, как в примитивном типе Java. –

ответ

1

Вы можете до отливки свободно (от примитивного, который использует меньше байт тот, который использует более байт), потому что вы не потеряете никакой информации (вы можете поместить небольшую вещь в большой контейнер).

Только тогда, когда вы вниз литом (от примитива, который использует более байт тот, который использует менее байт), что вы должны явно привести (если вы положили большую вещь в небольшом контейнере, вы рискуете измельчение некоторых вещей, чтобы сделать его пригодным)

2

int в Java - 32 бит. A byte в Java - 8 бит. Попробуйте следующий код:

byte foo = 5; 
int intFoo = foo; 

Java позволяет базовому типу примитивов бесплатно, потому что вы не теряете какую-либо информацию, делая это.

4

Контекст задается Javadoc, в котором говорится:

«Читает следующий байт данных из входного потока байт Значение возвращается как Int в диапазоне от 0 до 255. Если. байт недоступен, потому что конец потока достигнут, возвращается значение -1. ​​"

Под капотом, read метод либо имеет байт, чтобы вернуть или поток находится в положении EOF. Поэтому возвращаемое значение может иметь 257 возможных состояний и (очевидно), которые не будут вписываться в byte. API справляется с этим, возвращая int, закодированный, как указано в выдержке javadoc, приведенной выше.

Я не смотрел на код, но я ожидаю, что это что-то смутно, как это:

if (eof) { 
     return -1; 
    } else { 
     // Casting to an int sign extends to 32 bits, 
     // and we then take the bottom 8 bits. 
     return ((int) someByte) & 0xff; 
    } 

И когда вы получите результат, который вы должны сделать что-то вроде этого:

int res = is.read(); 
    if (res == -1) { 
     // handle EOF case ... 
    } else { 
     byte b = (byte) res; 
     // handle the byte ... 
    } 

Помогите мне создать схему распределения памяти.

Проблемы с распределением памяти отсутствуют. Типы byte и int являются примитивными типами.

Смежные вопросы