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

如果您不知道要预先分配多少字节,如何初始化ByteBuffer?

琴镜
2023-03-14
问题内容

这是:

ByteBuffer buf = ByteBuffer.allocate(1000);

…初始化a的唯一方法ByteBuffer

如果我不知道需要分配多少字节怎么办?

编辑: 更多详细信息:

我正在将一种图像文件格式转换为TIFF文件。问题是起始文件格式可以是任意大小,但是我需要将TIFF中的数据写入小端。因此,我正在阅读最终要打印到TIFF文件的内容到ByteBuffer中,以便可以将所有内容放入Little
Endian中,然后再将其写入外文件中。我猜想,因为我知道IFD有多长时间,标头有多少,而且我很可能可以找出每个图像平面中的字节数,所以在整个过程中我只能使用多个ByteBuffer。


问题答案:

要看。

对于大多数问题域,转换文件格式往往是一个已解决的问题。例如:

  • 蜡染可以在各种图像格式(包括TIFF)之间进行代码转换。
  • Apache POI可以在Office电子表格格式之间转换。
  • Flexmark可以从Markdown生成HTML。

清单很长。第一个问题应该是“哪个库可以完成此任务?”
如果考虑性能,则可能花费更多时间来优化现有软件包以满足您的需求,而不是编写另一个工具。(作为奖励,其他人将从集中的工作中受益。)

已知数量

  • 正在读取文件?分配file.size()字节。
  • 复制字符串?分配string.length()字节。
  • 复制TCP数据包?例如,分配1500个字节。

未知数量

当字节数确实未知时,您可以执行以下操作:

  • 做一个猜想。
  • 分析示例数据集以进行缓冲;使用平均长度。

StringBuffer除非另有说明,否则Java的Java
使用初始缓冲区大小来容纳16个字符。填充完16个字符后,将分配一个更长的新数组,然后复制原始的16个字符。如果的StringBuffer初始大小为1024个字符,则重新分配不会及早或频繁地发生。

优化

无论哪种方式,这都可能是过早的优化。通常,当您要减少执行的内部内存重新分配的数量时,将分配一定数量的字节。

这不太可能成为应用程序的瓶颈。



 类似资料:
  • 问题内容: 我必须在Java中以字节数组形式存储一些常量值(UUID),并且我想知道初始化这些静态数组的最佳方法是什么。这就是我目前的做法,但我觉得必须有更好的方法。 有什么我可以使用的,虽然效率可能较低,但看起来会更干净?例如: 问题答案: 使用将十六进制字符串转换为的函数,您可以执行 我建议您在使用Java将十六进制转储的字符串表示形式转换为字节数组中使用 DaveL定义的功能吗? 我将其插入

  • 我必须在java中以字节数组的形式存储一些常量值(UUID),我想知道初始化这些静态数组的最佳方法是什么。我现在就是这样做的,但我觉得一定有更好的办法。 有没有什么东西我可以使用,可能效率较低,但会看起来更干净?例如:

  • 问题内容: 我有一个包含未初始化通道的结构。 当我向它写入内容时,该例程将按预期方式阻塞,但是永远不会通知读者管道中有东西。 我很惊讶没有错误,我想知道Go在做什么。 在下面的示例中,消息和消息均未打印。(取消注释初始化,它将像超级按钮一样起作用) 这是操场https://play.golang.org/p/76zrCuoeoh (我知道我应该初始化通道,这不是问题的目的,我想知道使用未初始化的通

  • 我有一个非常基本的问题。我需要如何为ArrayList键入parrameters才能在BlueJ中使用代码?我有一个方法如下。

  • 要求:对于给定的命名曲线,发送尽可能少的数据,以便接收者可以构造EC Private ateKey。 我目前正在Android上使用BouncyCastle/SpongyCastle。这就是我到目前为止所理解的。 现在,使用Bouncy/海绵城堡,我得到了私钥的实际点,没有任何其他信息,这是在derEncoding。 问题:我如何重建Private ateKey对象,只需使用点D()和曲线名称?使

  • 我想在HikariCP将所有连接添加到其池后开始我的服务。我正在使用Spring Boot。 我有一个很大的池大小,但是在启动应用程序时,HikariCP需要花费很多时间来添加连接,并且我会出现连接超时。