当前位置: 首页 > 面试题库 >

为什么ByteArrayOutputStream使用int?

佟翰林
2023-03-14
问题内容

也许有人可以帮助我理解,因为我觉得我缺少一些可能会影响程序运行方式的东西。

我正在使用ByteArrayOutputStream。除非我错过了很多东西,否则此类的重点是创建一个byte []数组以供其他用途。

但是,BAOS上的“普通”写入功能采用的是整数而不是字节(ByteArrayOutputStream.write)。

根据此(原始数据类型)页面,在Java中,int是32位数据类型,而byte是8位数据类型。

如果我写这段代码

int i = 32;
byte b = i;

我收到有关可能需要对此进行更改的有损转换的警告…

int i = 32;
byte b = (byte)i;

我真的对write(int)感到困惑…


问题答案:

ByteArrayOutputStream只是覆盖在中声明的抽象方法OutputStream。因此,真正的问题是OutputStream.write(int),当声明的目标是向流中写入单个字节时,为什么要这样声明。流的实现在这里无关紧要。

您的直觉是正确的-在我看来,这是设计的断点。是的,它将丢失数据,正如在文档中明确指出的那样:

要写入的字节是参数b的八个低位。b的24个高阶位被忽略。

(我认为)这样做会更加明智write(byte)。唯一的缺点是,如果不进行强制转换,就无法使用文字值来调用它:

// Write a single byte 0. Works with current code, wouldn't work if the parameter
// were byte.
stream.write(0);

看起来不错,但不是-因为文字0的类型是int,因此不能隐式转换为byte。您必须使用:

// Ugly, but would have been okay with write(byte).
stream.write((byte) 0);

对我来说,这不是按原样设计API的充分理由,但这就是我们所拥有的-从Java 1.0开始就拥有了。不幸的是,如果不能在所有地方进行重大更改,现在无法修复。



 类似资料:
  • ByteArrayOutputStream类流在内存中创建缓冲区,发送到流的所有数据都存储在缓冲区中。 以下是ByteArrayOutputStream类提供的构造函数列表。 Sr.No. 构造函数和描述 1 ByteArrayOutputStream() 此构造函数创建一个具有32字节缓冲区的ByteArrayOutputStream。 2 ByteArrayOutputStream(int a

  • Apache CouchDB是最新的数据库之一。 CouchDB具有无模式的文档模型,更适合常见应用。可支持非常大数据量查询。 使用CouchDB的主要原因是什么? CouchDB易于使用。 有一个单词可以描述CouchDB - “Relax”。 它也是组成CouchDB官方标志一个单词。 “Apache CouchDB已经开始了,现在是放松时间。” CouchDB具有基于HTTP的REST AP

  • DevOps允许敏捷开发团队实施持续集成和持续交付。这有助于他们更快地将产品推向市场。 其他一些的重要原因是: 可预测性:DevOps可以显着降低新版本的故障率 再现性:版本一切,以便可以随时恢复早期版本。 可维护性:在新版本崩溃或禁用当前系统的情况下,可以毫不费力地进行恢复。 交付/上市时间:DevOps通过简化的软件交付将上市时间缩短至50%。对于数字和移动应用尤其如此。 更高的质量:DevO

  • Akka平台提供哪些有竞争力的特性? Akka提供可扩展的实时事务处理。 Akka为以下目标提供了一致的运行时与编程模型: 垂直扩展(并发) 水平扩展(远程调用) 高容错 这个模型是唯一需要学习和掌握的,它具有高内聚和高一致的语义。 Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心——akka-actor是非常小的,可以方便地加入你的应用中,提供

  • 问题内容: 我经常在PHP中看到包含include.inc文件的示例。.inc是什么意思?它的作用是什么?使用它的缺点和优点是什么? 问题答案: 它没有任何意义,只是一个文件扩展名。如果扩展名是.inc的文件被设计为包含在其他PHP文件中,这是某些人的惯例,但这只是惯例。 它确实存在一个可能的缺点,即通常没有将服务器配置为将.inc文件解析为php,因此,如果该文件位于您的Web根目录中,并且您的

  • 本文向大家介绍为什么要使用 kafka,为什么要使用消息队列?相关面试题,主要包含被问及为什么要使用 kafka,为什么要使用消息队列?时的应答技巧和注意事项,需要的朋友参考一下 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 解耦和扩展性:项目开始的