番外篇--文件备份系统

之前说过,我这个人有备份文件的习惯,而且不止一个备份硬盘,所以如果使用我之前的方式,先格盘,再进行复制,费时费力不说,还容易误操作,毕竟是人手点,时间长了很容易一下没把文件全部划下来,所以我就用Java自己写了一个文件备份工具类,现在我把这个工具完善了一下,增加了一些实用的功能,并在码云上开源了(地址),本篇主要记录了一下写这个系统的思路和坑吧

本来最初我是想写一个简单的io流,把文件从一个盘迁移到另外一个盘就行了,我最开始也确实是这样干的,但是很快,问题就来了,效率太低,我需要备份的文件大约是300G左右,其中起码有3万个文件,如果每次都重新写入,硬盘炸了不说,所消耗的时间也太多了,不值得,所以我后来又去试着依靠文件最后修改时间来确定是否需要更新,但是出现了我上一篇文章提到的那个问题,缓存的byte数组越大,效率越低,在上篇文章里我已经详细说过了,这里就不赘述了

解决完这个问题之后,我又想着,看看能不能增加一个功能,毕竟我备份的文件也是会经常改变的,我希望两个文件夹里的东西完全一致,于是我就写了一个镜像模式,将两个文件夹中的内容保持完全一致,最初的版本大约代码有2000行以上,我经过各种拆分,最终全部代码加起来也就500行不到,这件事给我提了醒,以后代码写完了一定要进行精简和重构,无论是代码行数还是运行效率都会大大提升,下一步准备做一个同步更新,把两个文件夹中的内容全部同步,以防我在备份硬盘里改了东西,最后一不留神就被覆盖了,然后下一步就是看看能不能加上多线程,然后加上多个硬盘同时同步,大概思路我已经理清了,先将文件读取到内存里,然后使用多线程从内存中同时写入多个硬盘,不过这个思路其实有问题,因为硬盘的写入速度是不同的,如果相差较大,写入量又多,会导致要么所有硬盘等最差的那个硬盘,要么就是内存炸了,要么就是多次读取同一个文件,我看看到时候解决一下

具体的代码我就不贴出来了,想看的可以去码云下载,我都写了注释,而且代码本身也不算太难

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章