gpt4 book ai didi

Java - 从 .dat 文件中获取某些信息并将其放入 .idx 文件中

转载 作者:行者123 更新时间:2023-12-01 04:11:48 27 4
gpt4 key购买 nike

我正在编写一些代码,以在 24 小时内每分钟创建并运行 18000 个测试,并将结果存储在我可以做到的 .dat 文件中。

我的下一个任务是在每小时开始时获取时间戳、设备 ID 和随机测试 ID 并将其存储在 .idx 文件中,因此它只有 24 行数据。

我遇到了麻烦。我可以让它在每小时开始时打印结果,但它也会打印每个测试的结果,而我只希望它在每小时开始时进行随机测试。

这是我到目前为止所做的;

public static void main (String [] args) throws FileNotFoundException
{
DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();

File fileNameDat = new File(df.format(date) + ".dat");
File fileNameIdx = new File(df.format(date) + ".idx");

RandomAccessFile rafDat = new RandomAccessFile(fileNameDat, "rw");
RandomAccessFile rafIdx = new RandomAccessFile(fileNameIdx, "rw");
Random rand = new Random();

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.add(Calendar.MILLISECOND, -cal.get(Calendar.MILLISECOND));
cal.add(Calendar.SECOND, -cal.get(Calendar.SECOND));
cal.add(Calendar.MINUTE, -cal.get(Calendar.MINUTE));
cal.add(Calendar.HOUR_OF_DAY, -cal.get(Calendar.HOUR_OF_DAY));

try
{
for(int hours = 0; hours < 24; hours++)
{
for(int tests = 1; tests <= 10; tests++) //18000 tests in total
{
for(int mins = 0; mins < 60; mins++)
{
rafDat.writeLong(cal.getTimeInMillis() + mins * 60000); //Timestamp
rafDat.writeInt(283); //Device ID
rafDat.writeInt(tests); //Test ID
rafDat.write((byte)1); //Availability
rafDat.writeInt(rand.nextInt(500)); //Latency
}

if(cal.get(Calendar.MILLISECOND) == 0 && cal.get(Calendar.SECOND) == 0 && cal.get(Calendar.MINUTE) == 0 && tests <= 2)
{
rafIdx.writeLong(cal.getTimeInMillis());
rafIdx.writeInt(0);
rafIdx.writeInt(rand.nextInt(tests));
}
}
cal.add(Calendar.HOUR_OF_DAY, 1);
}
rafDat.close();
rafIdx.close();
}
catch(IOException iOE)
{
System.err.println(iOE);
}
}

最佳答案

在你的代码中

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.add(Calendar.MILLISECOND, -cal.get(Calendar.MILLISECOND));
cal.add(Calendar.SECOND, -cal.get(Calendar.SECOND));
cal.add(Calendar.MINUTE, -cal.get(Calendar.MINUTE));
cal.add(Calendar.HOUR_OF_DAY, -cal.get(Calendar.HOUR_OF_DAY));

您确保 cal 没有毫秒、秒和分钟,这样

cal.get(Calendar.MILLISECOND) == 0 && cal.get(Calendar.SECOND) == 0 && cal.get(Calendar.MINUTE) == 0

始终为真。对于测试 1 和 2,这会导致向 rafIdx 写入一些内容:

if(cal.get(Calendar.MILLISECOND) == 0 && cal.get(Calendar.SECOND) == 0 && cal.get(Calendar.MINUTE) == 0 && tests <= 2)
{
rafIdx.writeLong(cal.getTimeInMillis());
rafIdx.writeInt(0);
rafIdx.writeInt(rand.nextInt(tests));
}

您的 cal 对象仅在小时循环的每次迭代中更新,然后仅更新小时,从而保持条件有效并解释您的结果。

我不太清楚从哪里开始重写代码来实现你想要的,但也许最简单的选择是在每次迭代秒时向你的 cal 对象添加第二个循环。为了使此方法符合您的描述,您还应该构建一种机制,以确保秒循环的每次迭代都恰好经过一秒

关于Java - 从 .dat 文件中获取某些信息并将其放入 .idx 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19857700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com