【发布时间】:2014-01-29 18:37:04
【问题描述】:
也许有人可以帮助我理解,因为我觉得我遗漏了一些可能会影响我的程序运行方式的东西。
我正在使用 ByteArrayOutputStream。除非我错过了一些重要的东西,否则这个类的重点是创建一个 byte[] 数组以供其他用途。
但是,BAOS 上的“普通”写入函数采用 int 而不是字节 (ByteArrayOutputStream.write)。
根据this(Primitive Data Types)页面,在Java中,int是32位数据类型,byte是8位数据类型。
如果我写这段代码...
int i = 32;
byte b = i;
我收到一条警告,提示可能有损转换需要对此进行更改...
int i = 32;
byte b = (byte)i;
我真的对 write(int) 感到困惑......
【问题讨论】:
-
请注意,是
OutputStream.write决定了这一点,而不是真正的ByteArrayOutputStream。 -
是的,ByteArrayOutputStream 几乎不能这样做,但是它的父类可以这样做。
-
使用
byte数据类型可能是个坏主意,byte[]的形式除外。short也是如此,恕我直言。将 byte 和 short 视为必要的邪恶,这只对让您读写奇怪的二进制数据格式有好处。不要使用字节/短变量、方法参数或返回类型。 (不,你不会以任何实质性的方式节省空间(除了在极少数情况下),而且你的代码实际上可能会更慢。) -
感谢大家的讨论。我很好奇强制转换许多其他函数的动机和避免确实是有道理的,即使它在我的大脑中微不足道。我正在使用 BAOS 为我自己的内部虚拟机生成自定义字节码,所以我还想确认我没有写一些天生就坏掉的东西。
标签: java