Кто-нибудь использует примитивные типы short и byte в реальных приложениях?
Вопрос
Я программирую на 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(короткий индекс столбца)
с
Для сеток данных в памяти это может быть полезно.Концепция сетки данных, такой как Gemfire, заключается в том, чтобы иметь огромную распределенную карту.Когда у вас недостаточно памяти, вы можете выполнить переполнение на диск с помощью стратегии LRU, но ключи всех записей вашей карты останутся в памяти (по крайней мере, с Gemfire).
Таким образом, очень важно создавать ключи с небольшим размером, особенно если вы работаете с очень большими наборами данных.Для ввода значения, когда это возможно, также лучше использовать соответствующий тип с небольшим объемом памяти...
Я использовал короткие строки и байты в Java-приложениях, обменивающихся данными с пользовательскими USB- или последовательными микроконтроллерами, чтобы получать 10-битные значения, заключенные в 2 байта в виде коротких строк.
byte
ы и short
они широко используются при разработке Java-карт.Взгляните на мой ответ на Существуют ли какие-либо реальные способы использования примитивного типа Java byte?.