Java读取Level-1行情dbf文件极致优化(1)
时间:2021-07-01 10:21:17
帮助过:2人阅读
void addWatcher(String hangqingFolder, String hangqingFile)
throws Exception {
// watch mask, specify events you care about,
// or JNotify.FILE_ANY for all events.
int mask =
// JNotify.FILE_CREATED |
// JNotify.FILE_DELETED |
JNotify.FILE_MODIFIED;
// 我们只需要注册修改事件
// JNotify.FILE_RENAMED;
// watch subtree?
boolean watchSubtree =
false;
// add actual watch
watchId = JNotify.addWatch(hangqingFolder, mask, watchSubtree,
new JNotifyListener() {
public void fileRenamed(
int wd, String rootPath, String oldName, String newName) {
// do nothing.
}
public void fileModified(
int wd, String rootPath, String name) {
if (!hangqingFile.equalsIgnoreCase(name))
//如果是修改的其他文件,则忽略
return;
readHangqingFile(hangqingFolder + File.separator +
hangqingFile);
}
public void fileDeleted(
int wd, String rootPath, String name) {
// do nothing
}
public void fileCreated(
int wd, String rootPath, String name) {
// do nothing
}
});
}
以上代码:
1,我们只要监视文件修改,因此只要设置mask = JNotify.FILE_MODIFIED
2,不需要递归地监视子目录,设置watchSubtree = false
3,由于监视的是文件夹,而不是文件,在fileModified方法中,我们要判断修改的是不是我们关心的文件(即行情文件),如果不是,则忽略。如果是,就调用readHangqingFile开始读取。
JNotify是基于操作系统API实现的,即使用JNI实现的,因此除了jar文件,还包含.dll文件和.so文件。用eclipse开发时,我们需要指定这些本地库的目录,如下图所示:
部署时,需要将本地库放在执行根目录下,或者用-Djava.library.path=/native/library/path 指定本地库的位置。
采用JNotify,用(基于操作系统的)通知而不是轮询,可以非常快地发现文件被更新,根据测试时间<1ms (我觉得应该远小于1ms,但是由于文件修改时间单位是毫秒,没办法更精确的测量)。
待续。。。
Binhua Liu原创文章,转载请注明原地址http://www.cnblogs.com/Binhua-Liu/p/5609396.html
Java读取Level-1行情dbf文件极致优化(1)
标签: