对于程序开发来说,尤其是游戏程序开发,光光客户端的时间系统是满足不了需求的。下面利用正则解析国家授时中心网络服务器:
国家授时中心网络服务器网址为:http://www.time.ac.cn/stime.asp 。
代码如下:
/** * @author long * @param args */ public static void main(String[] args) { String url = "http://www.time.ac.cn/stime.asp"; String content = download(url); Pattern p1 = Pattern.compile("hrs\\s+=\\s+\\d{1,2}"); Pattern p2 = Pattern.compile("min\\s+=\\s+\\d{1,2}"); Pattern p3 = Pattern.compile("sec\\s+=\\s+\\d{1,2}"); Matcher m1 = p1.matcher(content); Matcher m2 = p2.matcher(content); Matcher m3 = p3.matcher(content); if (m1.find()) { System.out.println("the hour is---->" + m1.group().replace("hrs = ", "")); } if (m2.find()) { System.out.println("the hour is---->" + m2.group().replace("min = ", "")); } if (m3.find()) { System.out.println("the hour is---->" + m3.group().replace("sec = ", "")); }
/** * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容 1.创建一个URL对象 * 2.通过URL对象,创建一个HttpURLConnection对象 3.得到InputStram 4.从InputStream当中读取数据 * @author long * @param urlStr * @return */ public static String download(String urlStr) { StringBuffer sb = new StringBuffer(); String line = null; BufferedReader buffer = null; try { // 创建一个URL对象 URL url = new URL(/blog_article/urlStr/index.html); // 创建一个Http连接 HttpURLConnection urlConn = (HttpURLConnection) url .openConnection(); // 使用IO流读取数据 buffer = new BufferedReader(new InputStreamReader( urlConn.getInputStream())); while ((line = buffer.readLine()) != null) { sb.append(line); } } catch (Exception e) { e.printStackTrace(); } finally { try { buffer.close(); } catch (Exception e) { e.printStackTrace(); } } return sb.toString(); }这里没有截取年月日,但是道理一样。
经过了数年酝酿,微软终于发布了消费市场期待已久的反病毒软件。最初,该杀毒软件产品代码为“Morro”,不过在正式发布时,微软将其更名为Microsoft Security Essentials,并且将于近日发布公开测试版。任何使用正版Windows XP(Service Pack 2或更高版本), Windows Vista,或Windows 7的用户,都可以免费下载该杀毒软件,而且未来该软件的正常升级仍然是免费的。预计正式版的Microsoft Security Essentials将于今年秋天发布。
据微软表示,测试版在全球范围的下载量控制在7.5万份。最初的测试版下载范围控制在美国本土,以色列(开发团队所处的国家)和巴西。一个月之后将对中国用户开放下载。在中国和巴西,电脑用户安装杀毒软件的比例并不高,导致恶意软件的感染率居高不下,而此次提前向这两个国家开放测试版下载,也并非巧合。据微软表示,之所以这样做,是因为与发达国家相比,付费杀毒软件在发展中国家的普及具有更大的阻碍,同时发展中国家的网络接入速度慢,信用卡持有率较低,因此更适合推广免费杀毒产品。
Microsoft Security Essentials在安装时需要进行正版验证,这意味着任何使用盗版Windows的系统将无法安装这套免费的杀毒软件。不过安装过程并不需要用户输入任何个人信息,软件也不会自动提交任何信息。在上周的一次采访中,Microsoft Security Essentials产品经理Theresa Burch明确的证实了这一原则:“我们不会从客户那里收集任何信息。包括Windows Live ID都不需要。用户只需要同意EULA,下载并使用就可以了。”
最近几天我也一直在测试较早版本的 Microsoft Security Essentials。测试环境包括两台电脑,其中一台运行32-bit版本的Windows Vista,另一台运行64-bit版本的Windows 7 泄露版。本文中我所测试的版本要比目前互联网上流传的版本更新一些。下面就是我对Microsoft Security Essentials 的测试报告:
第一次使用Microsoft Security Essentials 如果给你似曾相识的感觉,可以说毫不奇怪。 因为它和上市三年,在Windows Vista 和 Windows 7中默认集成的反间谍软件Windows Defender 界面非常类似,只是增加了许多功能。在前者的基础上,微软为Microsoft Security Essentials增加了实时和按需启动的反病毒保护功能。它和微软的其它反恶意软件程序(比如针对企业的Forefront和每月更新的Microsoft Malicious Software Removal Tool)共用相同的引擎和病毒特征库 。
MSE的安装包非常小。针对Windows7的x64版本只有3.8 MB,针对Vista/Windows 7 的x86版本只有4.8 MB,而针对WindowsXP系统的安装包也只有7.7 MB
大小。整个安装过程不超过4分钟,而且如前所述,整个安装过程中不需要用户提供任何私人信息。在接受软件的安装协议后,软件会通知我将进行病毒特征库升级,接下来就开始自动下载更新文件。
接下来MSE会进行大约5分钟的系统快速扫描,以确保没有任何已知的干扰程序。
微软表示,MSE是一款经过Windows徽标认证的软件(这是当然了),每天都会通过Microsoft Update 进行病毒库更新。新的病毒特征每天大约公布三次,这意味着用户大约每隔八个小时,就可以使用更新的病毒库了。而MSE的内核,即反病毒引擎,大约是以月为单位进行更新的。如果软件开启了自动更新,那么所有更新过程对用户来说都是透明的。
MSE的第一个特点是运行起来非常安静。只有一个托盘区图标显示了这个程序正在运行(在Windows7中默认是隐藏托盘图标的)。MSE不会在浏览器工具栏上增添任何按钮,也没有增加桌面工具。在我的两台测试系统上,MSE运行的相关服务AntiMalware Service所占用的内存空间在35 到50MB之间。微软的 Alan Packer 解释说,“微软在MSE性能上下了很大功夫,这包括内存管理和CPU效率两方面。” 只有当我再尝试下载病毒测试代码时,MSE才弹出了警告信息,其余时候,这个反病毒软件都非常的安静。如果MSE在升级或其它工作时遇到问题,在Windows安全中心(xp或Vista系统)或Windows7的Action Center中就会给出警告信息。
MSE的主界面遵循着“红色表示危险,绿色表示安全”的传统警示色彩方案。
和很多杀毒软件一样, MSE也提供实时监控和按需扫描引擎两种查杀病毒的方式。在使用中我发现,按需扫描时对CPU的占用率不足50%,这可以有效的减低反病毒软件对其他正常软件运行的影响。当我试图下载工业标准EICAR病毒测试样本时,MSE的实时监控给出了警报信息,并立即中断了下载。
点击 Show Details 按钮可以看到相关的警告信息。“红色代表危险”,红色的窗口中给出的是来自微软恶意软件数据中心提供的相关信息。
病毒的杀除过程采用的是快速删除病毒并重新进行扫描的设计方式。正如 Packer所说得:“恶意软件都是打包发送的,因此我们在检测到威胁后还会继续扫描其它文件。”
和很多流行的杀毒软件一样, MSE 依赖于最新的病毒特征库,但是它自身也带有云查杀功能。但是最近也有报道指出,这并不是基于云的服务,而是提供了一个动态的特征码服务,每日会将特征库进行推送。这种方式可以有效降低系统暴露于最新恶意软件下的窗口时间。通过监视系统的可疑行为,MSE的这个服务可以要求客户上传可疑文件。Rootkit 检测功能针对内核模式的恶意软件,并可以检测出一系列典型的rootkits。
那么MSE的杀毒效果到底如何呢?早在2007年,微软的OneCare就曾经在第三方评测中名落孙山,几乎成了垫底的产品,不过自那以后,微软的安全产品有了长足的进步。在今年五月份,一个由独立机构AV-Comparatives进行的评测中,微软的OneCare(与MSE采用相同的反病毒引擎和病毒特征库)获得了最高评级(Advanced+)。在同时参评的16个反病毒产品中,只有三个获得了最高评级。在查杀精确度上,微软的技术获得了第二,仅次于AVIRA,但是领先于AVG, Symantec, McAfee,以及其它产品。同时,在误报率评测中,微软远远将对手甩在了身后,其误报率远低于其余各款产品。
在最近一次由独立的 ICSA Labs所做的评测中,微软的技术通过了全部测试项目,而 McAfee的 VirusScan系列和几个小厂商的产品,在某些项目上均有败绩。
可以肯定,在微软的MSE测试版公开下载后,会有大量的第三方评测机构,以及微软的潜在竞争对手,对于MSE进行大量而又全面的测试。如果MSE有任何漏洞或弱点,我们都不会漏掉的。
1、获取一个Class对象
Class c = this.getClass();//
ReflectImplement r = new ReflectImplement();//通过类实例获得
Class c1 = r.getClass();
Class subClass = c1.getSuperclass();//通过类实例获得父类对象
Class c2 = ReflectImplement.class;//通过类名.class获得
Class c3 = Class.forName("ReflectImplement");//通过类名字符串获得
2、获得类名称
c1.getName();
3、修饰符Modifier
Modifier.toString(c2.getModifiers())//类的修饰符
Field[] fields1 = c2.getDeclaredFields();//该方法访问
Modifier.toString(field1[0].getModifiers())
4、检索类接口
Class [] inf = c2.getInterfaces();
5、检索类所有成员
Field[] fields = c2.getFields();//该方法只能访问公共变量
for(int i = 0; i < fields.length; i++)
{
String str = fields[i].getName() + "" + fields[i].getType().getName();
}
Field[] fields1 = c2.getDeclaredFields();//该方法访问所有变量
6、检索类的构造函数
Constructor[] constructor = c1.getDeclaredConstructors();
for(int i = 0; i < constructor.length; i++)
{
Constructor cstr = constructor[i];
System.out.print("\n" + cstr.getName());
System.out.print("\n" + cstr.getDeclaringClass());
Class[] cp = cstr.getParameterTypes();
for(int j = 0; j < cp.length; j++)
{
System.out.print("\n" + cp[j]);
}
}
7、检索类的方法
Method [] methods = c1.getDeclaredMethods();
for(int i = 0; i < methods.length; i++)
{
Method method = methods[i];
Class cp[] = method.getParameterTypes();//该方法对应的参数类型
method.getExceptionTypes();
}
-------------------------------------------高级用法案例---------------------------------------
1. 得到某个对象的属性-
/*
OWNER 是一个类实例 A a。
*/
public Object getProperty(Object owner, String fieldName)
{
Class<?> class1 = owner.getClass();
Field[] fields = class1.getFields();//遍历所有的属性(public)
for(int i = 0; i < fields.length; i++)
{
System.out.print(fields[i].getName());
}
Field field = class1.getField(fieldName);//通过Class得到类声明的属性。
Object object = field.get(owner);//通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
System.out.print(object);
}
return null;
}
/*
rest是一个类实例 B b
*/
public boolean isValidate(Restaurant(one class) rest) {
Class<?> clazz = rest.getClass();
Field[] fields = clazz.getFields();
for (Field field : fields) {
try {
Object object = field.get(rest);
if (object == null) {
System.out.println(field.getName() + "-->is null");
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
得到类的静态属性
public Object getStaticProperty(Object owner, String fieldName)
{
Class<?> class1 = owner.getClass();
Field field = class1.getField(fieldName);//该属性是静态的,所以直接从类的Class里取。
Object object = field.get(class1);
return null;
}
//执行某对象的方法
public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception
{
Class<?> ownerClass = owner.getClass();
Class<?>[] argsClass = new Class[args.length];
for(int i = 0, j = args.length; i < j; i++)
{
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);//查找匹配的方法
return method.invoke(owner, args);
return method.invoke(null, args);//如果是静态方法,则用NULL,因不需要借助实例对象
}
//新建实例对象
Class newoneClass= Class.forName(className);
Class[] argsClass= new Class[args.length];
for (int i = 0, j= args.length; i< j; i++) {
argsClass[i]= args[i].getClass();
}
Constructor
cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args); //新建实例。
如果不需要参数,可以直接使用newoneClass.newInstance()来实现。