【发布时间】:2015-03-25 13:18:45
【问题描述】:
我正在使用 RandomAccesFile 并一次写入 10MB 的数据块。以下是源码。这里是在 write 调用中写入 10MB 数据。大约需要 700 毫秒。有没有办法使用文件通道或其他方式来改善这一点。文件系统是 NFS。
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
OutputStream output = Channels.newOutputStream(randomAccessFile.getChannel());
randomAccessFile.seek(offset);
output.write(data, 0, dataLength);//10MB
output.flush();
【问题讨论】:
-
你真正想要达到什么目的?
-
10 MiB 在不到一秒的时间内是合理的,老实说;不要忘记您必须通过网络,并且网络开销不可忽略。您可以在此处获得的主要性能提升是通过检查和修改 NFS 服务器/客户端的配置(如有必要)。
-
你可以压缩你的数据
-
它是一个 servlet,它以 10MB 的块读取 POST 数据并保存到文件中。如果失败,将数据读入块以重试文件操作。
-
randomAccessFile在您测试它时不能为空。您应该直接使用RandomAccessFile编写,并完全摆脱Channels和OutputStream的东西。
标签: java performance io nfs