不妨换一下思路

今天在处理文件是否修改的问题的时候,走了不少弯路,记录一下,留着提醒自己,也提醒一下别人。
内容判断
首先,由于编辑器是第三方的,所以我只能够想到利用文件的内容是否发生变化来进行判断,这里也就出现了第一个版本,对内容的判断。
XML节点判断
后来出现了问题,那就是有些时候,内容中会多出一些空格或者空行来,由于编辑器的内容格式是xml,所以多了空行之类的对于编辑器没有任何问题,可是我的判断却会出现错误;这里我也就添加了xml的解析代码,然后对于xml的每一个节点进行判断。
Bug出现
大部分的文件都没有问题,可是,出现了一种较为少见的bug,就是部分文件还是会出现没有修改,却被判断为修改了的情况。由于很难复现,一开始没有注意,直到后来发现一篇文章必现该问题,就进行了调试跟踪。发现编辑器生成的xml文件中有一级节点居然是无序的,也就是可以是任何顺序,都不影响显示,可是判断时却是按照有序进行的判断,也就导致判断错误。
思路过程
【不妨换一下思路】由于因为这些节点的名字都是相同的,而且处在同一级,如果利用节点判断,就需要个数平方的次数来判断了,对性能有较大的影响。
然后我想到,先把节点进行排序,然后再进行比较,可是发现由于名字相同,属性的顺序不确定,很难准确的进行排序。
解决方法
当时找同事询问有没有什么好的办法,大家也都没有想到。然后有人问了一句:“你为什么要进行xml的解析和排序啊?”
我突然想到:“对啊,我为什么要解析呢?我的目的是判断内容有没有被修改过,我已经监控屏幕的输入输出事件,只需要根据这个添加一个状态就OK了啊。”
其实能想到也是因为之前的一个需求中我已经添加了对屏幕事件的监控,却完全忽略了这个问题也可以这么解决,至此,问题也就不存在了,因为不使用xml解析,自然就不需要考虑太多的问题了。
结论
有时候,必须要太钻牛角尖,也许换一个角度,问题就很变得容易解决了。

    推荐阅读