Кто-нибудь использует примитивные типы short и byte в реальных приложениях?

StackOverflow https://stackoverflow.com/questions/402247

  •  03-07-2019
  •  | 
  •  

Вопрос

Я программирую на Java с 2004 года, в основном корпоративные и веб-приложения.Но я никогда не пользовался короткий или байт, кроме игрушечной программы, просто для того, чтобы знать, как работают эти типы.Даже в для цикла из 100 раз, мы обычно идем с инт.И я не помню, сталкивался ли я когда-либо с каким-либо кодом, который использовал байт или короткий, кроме некоторых общедоступных API и фреймворков.

Да, я знаю, вы можете использовать короткий или байт для экономии памяти в больших массивах, в ситуациях, когда экономия памяти действительно важна.Кто-нибудь хочет попрактиковаться в этом?Или это просто что-то из книг.

[Отредактировано]

Используя байт массивы для сетевого программирования и обмена данными с сокетами - довольно распространенное использование.Спасибо, Даррен, что обратил на это внимание.А теперь как насчет короткий?Райан привел отличный пример.Спасибо, Райан.

Это было полезно?

Решение

Имейте в виду, что Java также используется на мобильных устройствах, где объем памяти гораздо более ограничен.

Другие советы

Я часто использую byte.Обычно в виде массивов байтов или байт-буфера, для сетевой передачи двоичных данных.

Я редко использую float или double, и не думаю, что когда-либо использовал short.

Я часто использовал "байт" в коде C / C ++, реализующем такие функции, как сжатие изображений (т.е.запуск алгоритма сжатия над каждым байт черно-белого растрового изображения), и обработка двоичных сетевых сообщений (путем интерпретации байты в сообщении).

Однако я практически никогда не использовал "float" или "double".

Основное применение, которое я видел для них, - это обработка данных с неизвестной структурой или даже без реальной структуры.Сетевое программирование является примером первого (тот, кто отправляет данные, знает, что это значит, но вы, возможно, нет), что-то вроде сжатия изображений в 256 цветов (или оттенков серого) является примером последнего.

С самого начала мне на ум приходит grep как другое применение, как и любое копирование файлов.(Конечно, операционная система сделает это, но иногда этого недостаточно.)

Сам язык Java неоправданно затрудняет использование byte или short типы.Всякий раз, когда вы выполняете какую-либо операцию над byte или short значение, Java продвигает его к int во-первых, и результат операции возвращается в виде int.Кроме того, они подписаны, и нет никаких неподписанных эквивалентов, что является еще одним частым источником разочарования.

Таким образом, вы в конечном итоге используете byte во многом потому, что это по-прежнему основной строительный блок всех кибернетических процессов, но short с таким же успехом тип мог бы и не существовать.

До сегодняшнего дня я не замечал, как редко ими пользуюсь.

Я использовал byte для материалов, связанных с сетью, но в большинстве случаев они использовались для моих собственных инструментов / обучения.В рабочих проектах эти вещи обрабатываются фреймворками ( например , JSP ).

Короткий?почти никогда.

Длинный?Ни то, ни другое.

Мои предпочтительные целочисленные литералы всегда являются int, для циклов, счетчиков и т.д.

Когда данные поступают из другого места (например, из базы данных), я использую правильный тип, но для литералов я всегда использую int .

Я использую байты во множестве разных мест, в основном связанных с низкоуровневой обработкой данных.К сожалению, разработчики языка Java сделали байты подписанными.Я не могу припомнить ни одной ситуации, в которой отрицательные значения в байтах были бы полезны.Наличие диапазона 0-255 было бы гораздо полезнее.

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

Я согласен с Том.В идеале, в языках высокого уровня мы не должны беспокоиться о базовых машинных представлениях.Мы должны быть в состоянии определять наши собственные диапазоны или использовать числа произвольной точности.

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

Возможно, интереснее взглянуть на семантику int .Являются ли эти произвольные ограничения и тихое усечение тем, чего вы хотите?Поскольку коду уровня приложения действительно нужны целые числа произвольного размера, просто в Java нет способа выразить их разумно.

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

Я обнаружил, что использую байтовые переменные при выполнении некоторой низкоуровневой обработки изображений.Процедуры .Net GDI + draw были очень медленными, поэтому я создал свои собственные вручную.

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

Apache POI использовал short довольно много раз.Вероятно, из-за ограничения количества строк / столбцов в Excel.

Несколько месяцев назад они сменились на int замена

createCell(короткий индекс столбца)

с

createCell(столбец int).

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

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

Я использовал короткие строки и байты в Java-приложениях, обменивающихся данными с пользовательскими USB- или последовательными микроконтроллерами, чтобы получать 10-битные значения, заключенные в 2 байта в виде коротких строк.

byteы и shortони широко используются при разработке Java-карт.Взгляните на мой ответ на Существуют ли какие-либо реальные способы использования примитивного типа Java byte?.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top