В Java кто-нибудь использует short или byte? - PullRequest
31 голосов
/ 08 октября 2009

Помимо использования (byte []) в потоковом режиме, я не вижу байт и шорт, которые часто используются. С другой стороны, я видел давно, где фактическое значение | 100 | и байт будет более уместным. Является ли это следствием относительно недорогой природы памяти сейчас или это всего лишь мелочи, о которых разработчикам не нужно беспокоиться?

Ответы [ 10 ]

33 голосов
/ 08 октября 2009

Они используются при программировании для встроенных устройств, которым не хватает памяти или дискового пространства. Такие как приборы и другие электронные устройства.

Байт также используется в низкоуровневом веб-программировании, где вы отправляете запросы на веб-серверы, используя заголовки и т. Д.

23 голосов
/ 09 октября 2009

Тип данных byte часто используется при работе с необработанными данными из файла или сетевого подключения, хотя в основном он используется как byte[]. Типы short и short[] часто используются в связи с графическим интерфейсом пользователя и обработкой изображения (для местоположений в пикселях и размеров изображения), а также при обработке звука.

Основная причина использования byte или short - ясность. Программный код безоговорочно гласит, что должны использоваться только 8 или 16 битов, и когда вы случайно используете больший тип (без соответствующей трансляции типов), вы получаете ошибку компиляции. (Следует признать, что это также может рассматриваться как неприятность при написании кода ... но еще раз наличие типов типов указывает на то, что с читателем происходит усечение.)

Вы не добьетесь экономии места при использовании byte или short в простых переменных вместо int, потому что большинство реализаций Java выравнивают переменные стека и члены объекта по границам слов. Однако примитивные типы массивов обрабатываются по-разному; то есть элементы массивов boolean, byte, char и short выровнены в байтах. Но если массивы не имеют большого размера или большого числа, они не вносят существенного вклада в общее использование памяти приложением.

Так что я думаю, что основная причина того, что разработчики не используют byte или short так часто, как вы (разработчик C), может заключаться в том, что это действительно не имеет большого (или часто никакого) различия , Java-разработчики не склонны одержимы чрезмерным использованием памяти, как это делали разработчики старой школы C :-).

13 голосов
/ 10 октября 2009

В 64-битном процессоре все регистры 64-битные, поэтому, если ваша локальная переменная назначена регистру и является логическим, байтовым, коротким, char, int, float, double или long, он не использует память и не экономит ресурсы. Объекты выровнены по 8 байтов, поэтому они всегда занимают кратное 8 байтов в памяти. Это означает, что Boolean, Byte, Short, Character, Integer, Long, Float и Double, AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference используют одинаковый объем памяти.

Как уже отмечалось, короткие типы используются для массивов и форматов чтения / записи данных. Даже тогда короткие не очень часто используются ИМХО.

Стоит также отметить, что ГБ стоит около 80 фунтов стерлингов на сервере, поэтому МБ составляет около 8 пенсов, а КБ - около 0,008 пенсов. Разница между байтом и длинной составляет около 0,00006 пенсов. Ваше время стоит больше, чем это. особенно если у вас есть ошибка, связанная с слишком малым типом данных.

5 голосов
/ 08 октября 2009

Чаще всего я бы использовал типы short и byte при работе с двоичными форматами и DataInput / DataOutput . Если спецификация говорит, что следующее значение является 8-битным или 16-битным значением, и нет никакого смысла повышать их до int (возможно, это битовые флаги), это очевидный выбор.

4 голосов
/ 12 августа 2010

Арифметика на byte с и short с более неудобна, чем с int с. Например, если b1 и b2 являются двумя byte переменными, вы не можете написать byte b3 = b1 + b2, чтобы добавить их. Это связано с тем, что Java никогда не выполняет внутреннюю арифметику в чем-либо меньшем, чем int, поэтому выражение b1 + b2 имеет тип int, хотя оно только добавляет два значения byte. Вместо этого вам придется написать byte b3 = (byte) (b1 + b2).

2 голосов
/ 21 сентября 2010

Я широко использовал short при создании эмулятора на основе 16-битной архитектуры. Я подумал об использовании char, чтобы у меня могли быть вещи без знака, но дух использования целочисленного типа в конце концов победил.

edit: относительно неизбежного вопроса о том, что я делал, когда мне был нужен самый важный бит: с тем, что я подражал, это почти никогда не использовалось. В тех немногих местах, где он использовался, я просто использовал побитовые модификаторы или математические хакеры.

1 голос
/ 12 августа 2010

байт [] происходит постоянно; буферы, специально для сетей, файлов, графики, сериализации и т. д.

1 голос
/ 09 октября 2009

short и другие часто используются для хранения данных изображения. Обратите внимание, что действительно важно количество бит, а не арифметические свойства (которые просто вызывают повышение до int или лучше.

short также используется в качестве индексов массива в JavaCard (1.0 и 2.0, IIRC, но не 3.0, который также имеет стек HTTP и веб-службы).

1 голос
/ 08 октября 2009

Я думаю, что в большинстве приложений short не имеет значения домена, поэтому имеет смысл использовать Integer.

0 голосов
/ 01 мая 2014

Большую часть времени у разработчика (Java, C #, BASIC и т. Д.) Никогда не бывает действительно веской технической причины для выбора типа int, короткого или байтового - когда емкости достаточно, конечно. Если значение будет меньше 2 миллиардов, тогда int будет.

Вы уверены, что у нас будут люди старше 255 лет? Ну, ты никогда не знаешь!

Разве не достаточно 32 767 возможных стран? Не думай слишком маленьким!

В вашем примере вы можете быть совершенно довольны своим байтовой переменной, содержащей 100, если вы абсолютно уверены, что она НИКОГДА не переполнится. Почему парни чаще всего используют int? Потому что .... потому что.

Это одна из тех вещей, которые большинство из нас просто делают, потому что мы видели это так в большинстве случаев и никогда не спрашивали по-другому.

Конечно, я ничего не имею против "всего, что есть". Я просто предпочитаю использовать правильный тип для каждого вида значения, без стресса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...