Java 有没有更有效的写入文件的方法?

Java 有没有更有效的写入文件的方法?,java,plugins,minecraft,performance,bukkit,Java,Plugins,Minecraft,Performance,Bukkit,我正在写一个Bukkit插件(对于那些不知道的人来说:“Mod和插件可以简化运行和管理Minecraft服务器。包括论坛和文档。”),它可以将用户的命令存储到各自的文件中。我觉得我写的代码效率非常低 每次启动PlayerCommandPrepreprocessEvent(每次输入开头带有“/”的消息时),我都会创建一个如下所示的变量 PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fM.retrievePla

我正在写一个Bukkit插件(对于那些不知道的人来说:“Mod和插件可以简化运行和管理Minecraft服务器。包括论坛和文档。”),它可以将用户的命令存储到各自的文件中。我觉得我写的代码效率非常低

每次启动PlayerCommandPrepreprocessEvent(每次输入开头带有“/”的消息时),我都会创建一个如下所示的变量

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fM.retrievePlayerFile(e.getPlayer().getName()), true)))
然后我写入特定播放器的文件,然后关闭输出

效率低下?是的,我想是的

有没有更简单、更有效的方法

提前谢谢

编辑:
fM.retrieveplayer文件(播放器)
这是:

public File retrievePlayerFile(String player) {
    player = player.toLowerCase();
    return (new File(plugin.getDataFolder(), "/users/" + player));
}

如果不能每次打开和关闭文件,则可能会加快速度
也许你们可以一直打开它(不确定你们的具体情况)。

如果没有,您可以尝试其他优化方法。

1) 您可以在用户注销时关闭它。2) 如果用户在N分钟内没有活动,您可以使用一些启发式方法并关闭它。2) 一个可能的想法是只开放那些真正最活跃的。您可以跟踪用户在过去M分钟内的活动,选择前K名用户,只打开他们的文件


代码本身并没有那么低效,至少我看不出您如何改进对文件的写入。我建议您稍微改变一下整体算法/设计,并尝试改进。

具体来说,您当前的方法有哪些方面效率低下?如果您不能每次打开和关闭文件,则可能会加快速度。也许你们可以一直打开它(不确定你们的具体情况)。好吧,这听起来可能很愚蠢…但它看起来如何。为一个简单变量创建一组匿名对象,将一行文本写入文件,然后结束。如果1000名玩家在线,平均每分钟运行3个命令,每分钟就会发生3000次。对我来说似乎效率很低。@peter.petrov不能这样做,我需要为服务器上的每个玩家打开一个writer。@jdersen用户注销时您可以关闭它。或者,如果用户在N分钟内没有活动,您可以使用一些启发式方法将其关闭。这个想法就是只开放那些真正最活跃的。您可以跟踪用户在过去M分钟内的活动,选择前K名用户,并保持其文件处于打开状态。只是一些想法。