【发布时间】:2015-07-22 08:27:29
【问题描述】:
我需要在文件中存储包含 80,000 个项目的布尔数组。我不在乎节省多少时间,我只对数组的加载时间感兴趣。 我没有尝试通过 DataOutputStream 存储它,因为它需要访问每个值。
我尝试通过 3 种方法做到这一点,例如:
- 序列化布尔数组
- 使用 BitSet 代替布尔数组对其进行序列化
- 将布尔数组转换为字节数组,其中 1 为真,0 为假,并由 FileChannel 使用 ByteBuffer 写入
为了测试通过这些方法读取文件的情况,我循环运行了每种方法 1000 次。所以我得到的结果如下所示:
- 布尔数组的反序列化需要 574 毫秒
- BitSet 的反序列化 - 379 毫秒
- 通过 MappedByteBuffer 从 FileChannel 获取字节数组 - 170 毫秒
第一种和第二种方法太长了,第三种可能根本不是方法。
也许有一个最好的方法来完成它,所以我需要你的建议
编辑
每个方法运行一次
- 13.8
- 8.71
- 6.46 适当地 ms
【问题讨论】:
-
你如何衡量这些数据的执行结果?
-
在一个循环中加载同一个文件 1000 次不会让您真正了解每次迭代需要多长时间 - 第一次会慢得多,然后文件系统缓存将启动。
-
@Luiggi 我已经在循环中运行了它们每个 1000 次,并通过 System.currentTimeMills() 或 System.nanoTime() 花费时间
-
@Jon 好的,给我一分钟时间测试一下
-
1. 13.8 2. 8.71 3. 6.46 毫秒