应该很简单。单色位图
我正在尝试处理长序列的二进制数据的斯卡拉。这是很长的0和1的列表。什么是存储/访问这种数据的“最佳”方式?
这里的重点是内存优化,所以我想避免使用整个字节来存储布尔值。访问也很重要,所以我想避免将它们分成几个字节然后放到数组中。
BitMap是一个好主意吗? scala中有这样的一个类吗?
如果没有,最好是使用ByteArray?你将如何实现这一点?
还有其他想法吗?
感谢,
应该很简单。单色位图
我正在尝试处理长序列的二进制数据的斯卡拉。这是很长的0和1的列表。什么是存储/访问这种数据的“最佳”方式?
这里的重点是内存优化,所以我想避免使用整个字节来存储布尔值。访问也很重要,所以我想避免将它们分成几个字节然后放到数组中。
BitMap是一个好主意吗? scala中有这样的一个类吗?
如果没有,最好是使用ByteArray?你将如何实现这一点?
还有其他想法吗?
感谢,
您可以使用java.util.BitSet中的(也许是一对夫妇,如果巧妙清楚地表达,使其更斯卡拉类)。
如果仍然过于昂贵,我会写一个内部使用数组的类,并将这些位打包成int或字节。
如果你的值不是均匀分布的(显着多于0),你可以使用run-length encoding来编码图像数据。这是Fax使用的编码。
有两种编码选项:
好主意,但我正在寻找数据结构,我可以存储这些信息。 如果你做了游程编码,你会使用Int列表吗?由于ints长度为32位,因此您需要非常特殊的分布才能获得良好的压缩效果(就像您说的,一张纸是大型空白区域的一个很好的例子) – Skuge 2010-06-29 12:09:57
如果您编码可以编码的字节,Int可能会被浪费2^7的长度为黑色或白色节省1位。 – 2010-06-29 12:17:27
太棒了!我发现Scala也有一个BitSet(http://www.scala-lang.org/docu/files/api/scala/collection/BitSet.html)。唯一的问题是尺寸可能太小(由Int指示)。 谢谢, – Skuge 2010-06-29 11:54:16