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

这是:

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个字符,则重新分配不会及早或频繁地发生。

优化

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

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

以上是 如果您不知道要预先分配多少字节,如何初始化ByteBuffer? 的全部内容, 来源链接: utcz.com/qa/406291.html

回到顶部