问题描述
Xdm是一款非常实用的下载器,他通过与浏览器插件的配合,可以对网页上许多视频内容进行下载,以下是对其代码的浅显探究。
解决方案
浏览
首先,查看在main目录里Java包下的代码文件:第一个便是downloaders包,里面存放的是文件下载时的线程管理、文件管理、当前速度计算等操作。第二个是mediaconversion包,应该是关于转换媒体格式。第三个是monitoring包,应该是监控下载链接里的格式。在第四个network包是关于网络的,如ftp与http协议,以及keep-alive,在main类中,使用Keep-Alive,使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。后面包别是preview、ui、util、videoparser、以及一些类和接口
查看探究
3.1 第一步
先去看了Config,首先引入了Logger类,这个类主要用途就是判断obj是否是它右边的类的实例,再返回boolean类型的数据并根据返回的boolean类型值调用不同的get-XXX-Stream()的方法,得到打印这个线程的名字,如果有错,会一并打印异常信息在程序中出错的位置及原因。。
public static void log(Object obj) { |
引入的StringUtils类,这个类里面有几个方法,第一个是对str判断空字符串;第二个也是判断空字符串,但是使用了trim()函数,去掉了字符串首尾的空格;第三个和第四个是分别将sb和s字符串转换为字节数组类型。
public static boolean isNullOrEmpty(String str) { return str == null || str.length() < 1; } public static boolean isNullOrEmptyOrBlank(String str) { return str == null || str.trim().length() < 1; } public static byte[] getBytes(StringBuffer sb) { return sb.toString().getBytes(); } public static byte[] getBytes(String s) { return s.getBytes(); } |
引入的XDMUtils类,但这个类其中又引入了一个Main类,在Main里使用了下面这段代码设置了一些指定键对值的系统属性。
System.setProperty(String prop, String value); |
而且后面还使用了一个main函数,在其中用Logger对obj进行判断,并用以下方法获取到Java 运行时环境版本和操作系统的版本。
System.getProperty("java.version"); System.getProperty("os.version"); |
在StringUtils类里还引入了XDMConstants接口,并且在这个接口中使用了public static final来修饰常量,这几个的意义及使用如下:
public: 使接口的实现类可以使用这个常量
static:static修饰就表示它属于类的,随的类的加载而存在的,如果是非static的话,就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以接口的常量必须定义为static
final:final修饰就是保证接口定义的常量不能被实现类去修改,如果没有final的话,由子类随意去修改的话,接口建立这个常量就没有意义了。
这个源码还有非常多的知识尚未探究,更好更正确的探究路线等待发现。
暂时到此,如有错误,欢迎指正!