我正在写一个Bukkit(对于那些不知道的人:“简化运行和管理Minecraft服务器的Mod和插件。包括论坛和文档。”)插件将用户的命令存储到各自的文件中。我觉得我写的代码非常低效。
每次PlayerCommandPreprocessEvent触发时(每次输入开头都带有“/”的消息),我都会创建一个变量......
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fM.retrievePlayerFile(e.getPlayer().getName()), true)))
然后我写入该特定播放器的文件,然后关闭输出。
低效?是的,我想是的......
有更简单,更有效的方法吗?
提前致谢。
修改: fM.retrievePlayerFile(Player player)
就是这样:
public File retrievePlayerFile(String player) {
player = player.toLowerCase();
return (new File(plugin.getDataFolder(), "/users/" + player));
}
答案 0 :(得分:0)
如果每次都无法打开和关闭文件,那么可能会加快速度。
也许你可以一直保持开放状态(不确定你的具体情况)。
如果没有,您可以尝试其他优化方法。
1)您可以在用户注销时关闭它。 2)如果用户N分钟没有活动,您可以使用一些启发式并关闭它。 2)一个可能的想法是只保留那些最活跃的开放。您可以在过去的M分钟内以某种方式跟踪用户的活动,获取前K个用户,并仅保留其文件。
代码本身并不是那么低效,至少我看不出你如何能够更好地改进对文件的写入。我建议你改变一下你的整体算法/设计,并尝试改进。