在真实应用程序中使用短和字节原始类型的人吗?

时间:2008-12-31 03:38:34

标签: java types primitive

我从2004年开始使用Java编程,主要是企业和Web应用程序。但我从未使用字节,除了玩具程序,只是为了知道这些类型是如何工作的。即使在100次的 for循环中,我们通常也会使用 int 。而且我不记得我是否遇到过使用 byte short 的任何代码,而不是某些公共API和框架。

是的我知道,在内存节省真正重要的情况下,您可以使用字节来节省大型阵列中的内存。有人关心练习吗?或者它只是书中的东西。

[编辑]

使用 byte 数组进行网络编程和套接字通信是一种非常常见的用法。感谢Darren指出这一点。那么怎么样?瑞恩,举了一个很好的例子。谢谢,瑞安。

15 个答案:

答案 0 :(得分:11)

我经常使用字节。通常采用字节数组或ByteBuffer的形式,用于二进制数据的网络通信。

我很少使用浮点数或双倍数,我认为我从未使用过短期。

答案 1 :(得分:8)

请记住,Java也用在移动设备上,而内存则受到更多限制。

答案 2 :(得分:4)

我在C / C ++代码中使用了'byte',实现了图像压缩等功能(即在黑白位图的每个字节上运行压缩算法),并处理二进制文件网络消息(通过解释消息中的字节)。

然而,我几乎从未使用过'float'或'double'。

答案 3 :(得分:4)

我见过的主要用途是处理具有未知结构甚至没有真实结构的数据。网络编程就是前者的一个例子(无论是谁发送数据都知道它意味着什么,但你可能不知道),像256色(或灰度)图像的图像压缩就是后者的一个例子。

在我脑海中浮现grep作为另一种用途,与任何类型的文件复制一样。 (当然,操作系统会这样做 - 但有时这还不够好。)

答案 4 :(得分:4)

Java语言本身使得使用byteshort类型变得非常困难。每当您对byteshort值执行任何操作时,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)

Apache POI使用short了好几次。可能是因为Excel的行/列数限制。

几个月前,他们改为int替换

createCell(short columnIndex)

createCell(int column)

答案 12 :(得分:1)

在内存数据网格中,它可能很有用。 像Gemfire这样的数据网格的概念是拥有一个巨大的分布式地图。 当您没有足够的内存时,您可以使用LRU策略溢出到磁盘,但地图中所有条目的键仍保留在内存中(至少使用Gemfire)。

因此,使用小占用空间来创建密钥非常重要,尤其是在处理非常大的数据集时。 对于条目值,当你可以使用适当的类型时,内存占用量也很小......

答案 13 :(得分:1)

我在Java应用程序中使用短路和字节与自定义USB或串行微控制器进行通信,以接收包含2个字节的10位值作为短路。

答案 14 :(得分:0)

byteshort广泛用于Java Card开发。看看我对Are there any real life uses for the Java byte primitive type?的回答。