Java中字节类型的用途

时间:2013-04-24 14:29:39

标签: java byte primitive

我在Java教程中读到了这一行:

  

byte:字节数据类型是8位有符号二进制补码整数。它有   最小值为-128,最大值为127(含)。该   字节数据类型可用于在大型数组中保存内存,其中   记忆储蓄实际上很重要。 它们也可以用来代替   int其限制有助于澄清您的代码;一个事实   变量的范围有限可以作为一种文档形式。

我不清楚这条粗线。有人可以帮我解释一下吗?

7 个答案:

答案 0 :(得分:7)

如果您使用的是最大值为127的变量,则可以使用byte代替int,以便其他人知道之后不会读取任何if条件,这可能会检查边界,该变量的值只能在-128到127之间。

所以它是一种自我记录的代码 - 正如你引用的文字中所提到的那样。

就我个人而言,我不建议使用这种“文档” - 只是因为变量只能保持最大值127并不能说明它的真正目的。

答案 1 :(得分:5)

Byte的(带符号)范围为-128到127,其中int的(也有符号)范围为-2,147,483,648到2,147,483,647。

这意味着,由于您要使用的值将始终在该范围之间,因此使用您告诉读取代码的任何人的字节类型,此值最多在-128到127之间,始终没有必须记录它。

尽管如此,正确的文档始终是关键,您只应在为可读性目的而指定的情况下使用它,而不是替代文档。

答案 2 :(得分:3)

我想可以使用byte处理实际字节的任何内容。

此外,颜色的部分(红色,绿色和蓝色)通常具有0-255的范围(尽管byte在技术上是-128到127,但这是相同的数量)。

可能还有其他用途。

我必须使用byte的一般反对意见(可能为什么它不常见),因为需要进行大量的投射。例如,无论何时对byte进行算术运算(X=除外),它都会自动提升为int(偶数byte+byte),因此如果你必须将其转换为byte你想把它放回byte

一个非常基本的例子:

FileInputStream::read返回包含在int(或-1)中的byte。这可以转换为FileInputStream file = new FileInputStream("Somefile.txt"); int val; while ((val = file.read()) != -1) { byte b = (byte)val; // ... } 以使其更清晰。 我不支持这样的例子(因为我实际上并没有(在这一刻)看到做下面的事情),只是说类似的东西可能有意义。

它也可能首先返回一个字节(如果文件结束可能会抛出异常)。这可能更清楚,但它的完成方式确实有意义。

FileInputStream

如果您对read了解不多,则可能不知道int返回的内容,因此您会看到int并且您可能认为有效范围是整个范围char(-2 ^ 31到2 ^ 31-1),或者可能是byte(0-65535)的范围(文件操作的假设不是很糟糕),但是你会看到演员表到byte,你再考虑一下。

如果返回类型为int,您将从一开始就知道有效范围。

另一个例子:

Color的一个构造函数可能已从3 byte更改为3 {{1}},因为它们的范围限制为0-255。

答案 3 :(得分:1)

这意味着知道某个值被明确声明为非常小的数字可能会帮助您回想起它的用途。

当您必须为代码创建文档时,请转到实际文档,但依赖于数据类型不是文档。

答案 4 :(得分:1)

int涵盖0到4294967295或2到32次幂的值。这是一个巨大的范围,如果你得分超过100的测试,那么如果你的所有数字都在0到100之间,那么你就浪费了额外的空间。它只需要更多的内存和硬盘空间来存储整数,并且严重数据驱动的应用程序如果您没有使用提供的额外范围,则会转化为资金浪费。

答案 5 :(得分:1)

Java中的

Integers以32位存储; bytes以8位存储。

假设您有一个包含一百万个条目的数组。哎呀!那太大了!

int[] foo = new int[1000000];

现在,对于foo中的每个整数,您使用 32位 4字节的内存。总的来说, 400万字节,或 4MB

请记住,Java中的integer是-2,147,483,648和2,147,483,647之间的整数。如果您的数组foo只需要包含1到100之间的整数,该怎么办?通过将foo声明为int数组,这是您未使用的大量数字。

这是byte变得有用的时候。 Bytes包含-128到127之间的整数,这非常适合您的需要!但为什么选择bytes因为它们使用整数空间的四分之一。现在你的阵列浪费了更少的内存:

byte[] foo = new byte[1000000];

现在foo中的每个条目都占用了 8位 1个字节的内存,所以foo只占用 1百万字节 1MB 的内存。

与使用int[]相比,这是巨大的改进 - 您刚刚节省了3MB内存。

显然,您不希望将此用于包含超过127的数字的数组,因此另一种读取您提到的粗线的方法是由于字节数量有限,因此开发人员可以知道变量严格限于这些界限。开发人员没有理由认为存储为字节的数字将超过127或小于-128。使用适当的数据类型可以节省空间并告知其他开发人员对变量施加的限制。

答案 6 :(得分:-1)

当您希望以文件或网络的形式处理数据流时,通常使用

字节数据类型。这背后的原因是因为网络和文件的工作原理是字节。

示例:FileOutStream始终将字节数组作为输入参数。