首页 > 编程语言 >java IO设计模式:观察者模式

java IO设计模式:观察者模式

时间:2023-11-05 19:33:44浏览次数:25  
标签:文件目录 StandardWatchEventKinds WatchService 观察者 Watchable IO java 设计模式 监听


  • NIO 中的文件目录监听服务使用到了观察者模式。
    NIO 中的文件目录监听服务基于 WatchService 接口和 Watchable 接口。WatchService 属于观察者,Watchable 属于被观察者。
  • Watchable 接口定义了一个用于将对象注册到 WatchService(监控服务) 并绑定监听事件的方法 register 。
  • WatchService 用于监听文件目录的变化,同一个 WatchService 对象能够监听多个文件目录。
  • Path 类 register 方法的第二个参数 events (需要监听的事件)为可变长参数,也就是说我们可以同时监听多种事件。
  • 常用的监听事件有 3 种:
StandardWatchEventKinds.ENTRY_CREATE :文件创建。
StandardWatchEventKinds.ENTRY_DELETE : 文件删除。
StandardWatchEventKinds.ENTRY_MODIFY : 文件修改。
  • register 方法返回 WatchKey 对象,通过WatchKey 对象可以获取事件的具体信息,
    比如文件目录下是创建、删除还是修改了文件、创建、删除或者修改的文件的具体名称是什么。
  • WatchService 内部是通过一个 daemon thread(守护线程)采用定期轮询的方式来检测文件的变化,简化后的源码如下所示。


标签:文件目录,StandardWatchEventKinds,WatchService,观察者,Watchable,IO,java,设计模式,监听
From: https://blog.51cto.com/zhangxueliang/8194800

相关文章

  • 几种常见的运动检测(Motion detection)方法
    本文选自《Multiplemethodsformotiondetection》,原文参考文末链接。 运动检测有许多不同的方案,但哪一个最适合您的需求?在这里,我将介绍一些使用最广泛的运动传感器技术,并探讨每种技术都可以发挥其优势的情况。 https://mp.weixin.qq.com/s/RsKubZTD97Mt44qd0sH1SA ......
  • java IO流:字符缓冲流
    ......
  • java基础:对Java集合的理解
    对Java集合的理解  集合是我们在工作中使用频率非常高的组件了。下面的两张图是集合框架的类图结构。TreeSet的本质是TreeMapHashSet的本质是HashMapJava集合是一组用于存储和操作对象的类和接口,提供了各种数据结构和算法的实现,用于解决不同的数据存储和访问需求。Java集合框架位......
  • Java基础:创建对象有几种方式?
    Java创建对象有几种方式?new关键字  平时使用的最多的创建对象方式Useruser=newUser();反射方式  使用newInstance(),但是得处理两个异常InstantiationException、IllegalAccessException:Useruser=User.class.newInstance();Objectobject=(Object)Class.forName("java.l......
  • java基础:Object中的常用方法
    介绍下Object中的常用方法clone方法  保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常,深拷贝也需要实现Cloneable,同时其成员变量为引用类型的也需要实现Cloneable,然后重写clone方法。finalize方法  该方......
  • java集合:什么是 fail-fast?
    说说什么是fail-fast?  fail-fast机制是Java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。  例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了,那么线程A访问集合时,就会......
  • java基础:static都有哪些用法?
    static都有哪些用法?  所有的人都知道static关键字这两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享.  除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:publiccalssPreCache{static{//执行相关......
  • java基础:再哈希法解决哈希冲突代码示例
    再哈希法(Rehashing)是解决哈希冲突的另一种方法。它与开放定址法不同,再哈希法使用多个哈希函数来确定冲突元素的位置,而不是在同一个哈希表中进行探测。下面是一个使用再哈希法解决哈希冲突的示例代码:publicclassRehashingHashTable{privateEntry[]table;privateint......
  • java基础:深拷贝和浅拷贝的区别是什么?
    深拷贝和浅拷贝的区别是什么?原型模式:设计模式-->Springbean的Scope浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.深拷贝:被复制对象的所有变量都含有与原来......
  • Entering China's strategies of water pollution and identifying an effective mea
    WaterPollutionControlStrategiesinChina(Someexamples)(1)China’sstrategyforcontrollingwaterpollutionfocusedfirstonreducingthedischargeofoxygen-demandingsubstances.The11thFiveYearPlan(FYP),adoptedin2006containedbindingtargets......