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

托尼·史塔克(Tony Stark):

这是:

ByteBuffer buf = ByteBuffer.allocate(1000);

...初始化a的唯一方法ByteBuffer

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

编辑:更多详细信息:

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

戴夫·贾维斯(Dave Jarvis):

要看。

图书馆

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

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

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


已知数量

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

未知数量

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

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

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

优化

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果您不知道要传递的方法的确切类,如何将方法传递给类

如果您不知道日期输入的格式,如何格式化日期字符串?

如果您不知道传递给数组的内容,如何映射数组?

如果您不知道密钥,如何检查 JSON 密钥的值是否为数组

如果您不知道Java 8中的确切迭代次数,如何停止无限流

如果您不知道它是 jpeg 还是 gif,请输入源类型

如果您不知道数组元素的索引,删除它的语法是什么?

当您不知道用户将输入多少个单词时,如何动态分配二维数组?

如何在不知道数组大小的情况下初始化数组?

我的USB HSM已初始化,现在我不知道如何使用它

当您一开始不知道数组的尺寸时如何在Julia中初始化数组

当您不知道有多少个整数时,如何从char字符串中读取整数?(在C中)

当您不知道其尺寸时如何移动视图?

初始化变量。我不知道他们的类型[java]

在不知道类型的情况下初始化一个 swift 变量

错误数组用作初始化程序,我不知道错误

在事先不知道维度的情况下初始化多维 std::vector

如果我不知道每秒有多少次运行,那么如何获得相同的输出?

如果我不知道深度是多少,如何在 Javascript 中动态处理嵌套对象?

我有一个代码,其中调用了Lateinit变量后对其进行了初始化,但我不知道如何

如何在不知道长度的情况下在C中初始化字符串,并继续向其附加字符?

列表框项目初始化,但一旦被选中,我不知道如何重置没有选择任何项目的列表框

当您不知道将有多少个嵌套 JSON 对象时,如何为每个级别生成 Vue 组件?

我需要初始化一个我以前真的不知道的东西,它在Ruby中是什么

如果我不知道他们的ID,如何检查选中了多少个复选框

当您不知道上限时,如何使用汇总案例语句代替PIVOT?

如何删除您不知道其正确名称的软件包?

当您不知道存储它的路径时如何保存 XmlDocument 对象?

如果不知道其名称,如何删除表PK