我从2004年开始使用Java编程,主要是企业和Web应用程序。但我从未使用短或字节,除了玩具程序,只是为了知道这些类型是如何工作的。即使在100次的 for循环中,我们通常也会使用 int 。而且我不记得我是否遇到过使用 byte 或 short 的任何代码,而不是某些公共API和框架。
是的我知道,在内存节省真正重要的情况下,您可以使用短或字节来节省大型阵列中的内存。有人关心练习吗?或者它只是书中的东西。
[编辑]
使用 byte 数组进行网络编程和套接字通信是一种非常常见的用法。感谢Darren指出这一点。那么短怎么样?瑞恩,举了一个很好的例子。谢谢,瑞安。
答案 0 :(得分:11)
我经常使用字节。通常采用字节数组或ByteBuffer的形式,用于二进制数据的网络通信。
我很少使用浮点数或双倍数,我认为我从未使用过短期。
答案 1 :(得分:8)
请记住,Java也用在移动设备上,而内存则受到更多限制。
答案 2 :(得分:4)
我在C / C ++代码中使用了'byte',实现了图像压缩等功能(即在黑白位图的每个字节上运行压缩算法),并处理二进制文件网络消息(通过解释消息中的字节)。
然而,我几乎从未使用过'float'或'double'。
答案 3 :(得分:4)
我见过的主要用途是处理具有未知结构甚至没有真实结构的数据。网络编程就是前者的一个例子(无论是谁发送数据都知道它意味着什么,但你可能不知道),像256色(或灰度)图像的图像压缩就是后者的一个例子。
在我脑海中浮现grep作为另一种用途,与任何类型的文件复制一样。 (当然,操作系统会这样做 - 但有时这还不够好。)
答案 4 :(得分:4)
Java语言本身使得使用byte
或short
类型变得非常困难。每当您对byte
或short
值执行任何操作时,Java首先将其提升为int
,并将操作结果作为int
返回。此外,它们已经签名,并且没有未签名的等价物,这是另一个经常受挫的原因。
所以你最终使用byte
因为它仍然是所有网络的基本构建块,但short
类型可能也不存在。
答案 5 :(得分:3)
直到今天,我还没有注意到我很少使用它们。
我将字节用于网络相关的东西,但大多数时候它们都用于我自己的工具/学习。在工作项目中,这些东西由框架(例如JSP)
处理短?几乎没有。
长?两者都不是。
我首选的整数文字总是int,for循环,计数器等。
当数据来自另一个地方(例如数据库)时,我使用正确的类型,但对于文字,我总是使用int。
答案 6 :(得分:3)
我在许多不同的地方使用字节,主要涉及低级数据处理。不幸的是,Java语言的设计者对字节进行了签名。我无法想到任何具有负字节值的情况。拥有0-255的范围会更有帮助。
我认为我从未在任何正确的代码中使用短裤。我也从不使用浮点数(如果我需要浮点值,我总是使用double)。
我同意Tom。理想情况下,在高级语言中,我们不应该关注底层的机器表示。我们应该能够定义自己的范围或使用任意精度数字。
答案 7 :(得分:3)
当我们为手机等电子设备编程时,我们使用字节和短路。在这种情况下,我们应该注意内存管理。
答案 8 :(得分:2)
查看int的语义可能更有趣。那些任意限制和无声截断你想要什么?对于应用程序级代码,我真的需要任意大小的整数,只是Java无法合理地表达它们。
答案 9 :(得分:1)
我在进行模型检查时保存状态时使用了字节。在该应用中,节省空间值得额外的工作。否则我从不使用它们。
答案 10 :(得分:1)
我发现在进行一些低级图像处理时我正在使用字节变量。 .Net GDI +绘制例程非常慢,所以我亲自动手。
但是,大多数情况下,我坚持使用有符号整数,除非我被迫使用更大的东西,考虑到问题的限制。我做的任何物理建模通常都需要浮点数或双精度数,即使我不需要精度。
答案 11 :(得分:1)
答案 12 :(得分:1)
在内存数据网格中,它可能很有用。 像Gemfire这样的数据网格的概念是拥有一个巨大的分布式地图。 当您没有足够的内存时,您可以使用LRU策略溢出到磁盘,但地图中所有条目的键仍保留在内存中(至少使用Gemfire)。
因此,使用小占用空间来创建密钥非常重要,尤其是在处理非常大的数据集时。 对于条目值,当你可以使用适当的类型时,内存占用量也很小......
答案 13 :(得分:1)
我在Java应用程序中使用短路和字节与自定义USB或串行微控制器进行通信,以接收包含2个字节的10位值作为短路。
答案 14 :(得分:0)
byte
和short
广泛用于Java Card开发。看看我对Are there any real life uses for the Java byte primitive type?的回答。