我需要在文件中存储包含80000项的布尔数组。我不在乎节省多少时间,我只关心数组的加载时间。我没有尝试通过DataOutputStream存储它,因为它需要访问每个值。
我试图通过3种方法来做到这一点,例如:
为了测试通过这些方法从文件中读取数据,我在循环中运行了每种方法1000次。所以我得到了这样的结果:
第一种和第二种方法太长,第三种可能根本不是方法。
也许有最好的方法来完成它,所以我需要你的建议
编辑
每个方法运行一次
所以我有一个非常相似的用例,我想序列化/反序列化一个非常大的布尔数组。
我实现了这样的东西,首先,我将布尔数组转换为整数数组,只是为了合并多个布尔值(这使得存储更有效率并且没有位填充问题)
现在这意味着我们必须构建包装器方法,这些方法将给出真/假
private boolean get (int index) {
int holderIndex = (int) Math.floor(index/buckets);
int internalIndex = index % buckets;
return 0 != (container[holderIndex] & (1 << internalIndex));
}
和
private void set (int index) {
int holderIndex = (int) Math.floor(index/buckets);
int internalIndex = index % buckets;
int value = container[holderIndex];
int newValue = value | (1 << internalIndex);
container[holderIndex] = newValue;
}
现在要序列化和反序列化,可以直接将其转换为ByTestStream并写入文件。
我的源码,供参考
为每个布尔值编写一个字节并开发一个自定义解析器怎么样?这可能是最快的方法之一。如果您想节省空间,也可以将8个布尔值放入一个字节,但这需要一些位移位操作。
下面是一个简短的示例代码:
public void save() throws IOException
{
boolean[] testData = new boolean[80000];
for(int X=0;X < testData.length; X++)
{
testData[X] = Math.random() > 0.5;
}
FileOutputStream stream = new FileOutputStream(new File("test.bin"));
for (boolean item : testData)
{
stream.write(item ? 1 : 0);
}
stream.close();
}
public boolean[] load() throws IOException
{
long start = System.nanoTime();
File file = new File("test.bin");
FileInputStream inputStream = new FileInputStream(file);
int fileLength = (int) file.length();
byte[] data = new byte[fileLength];
boolean[] output = new boolean[fileLength];
inputStream.read(data);
for (int X = 0; X < data.length; X++)
{
if (data[X] != 0)
{
output[X] = true;
continue;
}
output[X] = false;
}
long end = System.nanoTime() - start;
Console.log("Time: " + end);
return output;
}
加载 80.000 个布尔值大约需要 2 毫秒。使用 JDK 1.8.0_45 进行测试
问题内容: 我知道如何使用和File IOException 读取文件,但是我唯一不知道的是如何将文本作为数组存储在文件中。 这是我的代码: 这是我的文件包含的内容: 问题答案: 存储为字符串: 对于花车:
如何从包含大量数字的文本文件中读取并将其存储到int数组中,最后将该数组和数组大小传递给应用程序中使用的其他方法。到目前为止,我的代码读取文本文件并将其存储到ArrayList中,而不是数组中。谢谢你。
读取行和数字并将其存储到数组X中,但数组只到位置0和1,当它改变行时,它只将新的数字(例如NUM 3)写入旧数字所在的位置(例如pos 0中的NUM 1) 有什么解决办法吗?
问题内容: 我正在编写一个简单的子手程序。我在打开文件,然后将数据存储到数组时遇到困难。我似乎不知道该怎么做。这是针对学校项目的,因此,如果逻辑似乎不必要,请怪男人:) 我有一个包含十个单词的文本文件(words.txt)。它们在文件中,并且每个文件之间都有一行。它们需要导入到数组中。有人愿意帮助一个有抱负的年轻程序员吗?谢谢你提供的所有帮助! 问题答案: 我建议您使用(例如)和(使用构造它,然后
我有一个csv文件,标题在第一行,其值在所有石灰中。 标题应该是:标题1,标题2,标题3,。。。。 如果总共有200行,我将得到199个header1,header2值。 我试图将每个标头的所有值存储在一个数组中。 我试过的代码, 这样做的时候,我每行得到200个阵列。 如果假设有七个标头,我需要七个包含199个元素的数组。 顺便说一句,我不需要所有的标题值,我只需要一些标题,我可以通过拆分第一行
问题内容: 我需要创建一个数组来添加具有这种格式的对象,例如Swift中的字典:[“ key1”:“ value1”,“ key2”:“ value2”] 当我尝试全部保存时是正确的,但是使用键读取时会崩溃。var obj需要什么类型的数据? 问题答案: 这个问题的意思是“数组数组”,但是我想大多数人可能只是想知道如何将数组保存到。对于那些人,我将添加一些常见示例。 保存数组 检索数组 整数数组