[英]how to handle large amount of float data?
我们有一个包含大量float
数据(大约80MB)的二进制文件。 我们需要在Java应用程序中处理它。 数据来自医疗扫描仪。 一个文件包含一个Rotation
数据。 一个Rotation
包含960个Views
。 一个View
包含16 Rows
和一个Rows
包含1344个Cells
。 这些数字(他们的关系)是固定的。
我们需要将所有浮点数读入我们的应用程序,其代码结构反映了关于Rotation-view-row-cell
上述结构。
我们现在正在做的是使用float[]
来保存Cells
数据,然后使用ArrayList
for Rotation
, View
和Row
来保存它们的数据。
我有两个问题:
假设您没有对数据进行更改(添加更多视图等),为什么不将所有内容放在一个大数组中? ArrayLists的重点是你可以增长和缩小它们,这里你不需要它们。 您可以编写访问方法以获取给定视图,旋转等的正确单元格。
使用数组数组是一个更好的主意,这样系统就可以确定如何为您访问什么,它就像单个数组一样快。
迈克尔是对的,你需要缓冲输入,否则你将对每个字节进行文件访问操作,你的性能会很糟糕。
如果您希望尽可能地坚持当前的方法,可以通过将其容量设置为它们所容纳的元素数来最小化ArrayLists使用的内存。 否则他们会保留许多插槽,期望您添加更多插槽。
DataInputStream
(及其readFloat()
方法)包装FileInputStream
,可能在其间使用e BufferedInputStream
(尝试缓冲区是否有助于提高性能)。 您当前的方法是否有任何特定的性能/使用问题?
根据您提供的信息,我唯一可以建议的是尝试将View表示为行和单元格的float [] []。
对于数据加载:
DataInputStream应该可以正常工作。 但请确保将基础FileInputStream包装在BufferedInputStream中,否则您将面临为每个可能会降低性能的浮动执行I / O操作的风险。
保存数据的几个选项:
我还认为你可以将所有数据结构放入float[][][]
(与Nathan Hughes建议的相同)。 你可以有一个方法来读取你的文件并返回一个float[][][]
,其中第一个维度是视图的维度(960),第二个维度是行(16),第三个维度是细胞的维度( 1344):如果这些数字是修复,你最好使用这种方法:你节省内存,而且速度更快。
80 MB应该不是那么多你需要担心的数据。 我真的建议:
我知道你正在寻找上面描述的商店数据的有效方式,虽然你提到的尺寸不是很大我建议你看看巨大的收藏品。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.