当前位置:Gxlcms > 数据库问题 > Java读取Level-1行情dbf文件极致优化(1)

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)

标签:

人气教程排行