当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 背景知识 在我的经验中,大多数 Java 开发人员都需要解析某种文本。
 

 

 ·api文件产生器-javadoc.exe    »显示摘要«
    摘要:javadoc api文件产生器 javadoc程序读取一个java类文件并自动创建一组html文件,这些html 文件描述了java类文件的类、变量、成员函数,所有java类库的apihtml 文件都可以由此程序创建。javadoc把软件包名或源文件列表当做一个变量。 javadoc依靠以@打头的备注标记来创建html文件,下面就是标注的列表,它们被javadoc用于在html 文件中创建......
 ·扫描整个网段的多线程程序    »显示摘要«
    摘要:扫描500个ip10秒钟左右, 一个ip等待0.3秒用java写的过程编程,供参考:package steeven;import java.sql.*;import java.io.*;import java.util.*;import java.text.*;import javax.servlet.http.*;public class ip extends common implements......


构建用于正则表达式的抽象 Java API

背景知识

【程序编程相关:中怡数宽暨广深两地 新品发布会议

在我的经验中,大多数 java 开发人员都需要解析某种文本.通常,这意味着他们最初要花一些时间使用象 indexof 或 substring 那样的与 java 字符串相关的函数或方法,并且希望输入格式永远不变.但是,如果输入格式改变,那么用于读取新格式的代码维护起来就会变得更复杂.更困难.最后,代码可能需要支持自动换行(word wrapping).区分大小写等. 【推荐阅读:ST加强对华投资 欲取代德仪成为中国市场

【扩展信息:传中国网通拟在下月以3.5亿元出售亚洲网

由于逻辑变得更加复杂,所以维护也变得很困难.因为任何更改都可能产生副作用并使文本解析器的其它部分停止工作,所以开发人员需要时间修正这些小错误.

有一定 perl 经验的开发人员可能也有过使用正则表达式的经验.如果够幸运(或优秀)的话,这位开发人员能够说服团队其余的人(或至少是团队领导)使用这项技术.新的方法将取消编写用来调用 string 方法的多行代码,它意味着将解析器逻辑的核心委托出去,并替换为 regexp 库.

接受了有 perl5 经验的开发人员的建议后,团队必须选择哪个 regex 实现最适合他们的项目.然后他们需要学习如何使用它.

在简要地研究了从因特网上找到的众多可选方案后,假设团队决定从人们更熟悉的库中选择一个使用,如属于 jakarta 项目的 oro.接下来,对解析器进行较大程度地重构或几乎重新编写,并且解析器最终使用了 oro 的类,如 perl5compiler.perl5matcher 等.

这一决定的后果很明显:代码与 jakarta oro 的类紧密地耦合在一起.

团队承担了风险,因为不知道非功能性需求(如性能或线程模型)是否将得到满足.

团队已花费时间与财力来学习并重新编写代码,以使它使用 regexp 库.如果他们的决定是错误的并且选择了新的库,则这一工作在成本上将不会有很大区别,因为将需要再次重新编写代码.

即使库工作正常,如果他们决定应该迁移到全新的库(例如,包括在 jdk 1.4 中的库),怎么办?

去耦的好处

有没有办法使团队知道哪个实现最适合他们的需要呢(不仅现在能将来也能)?让我们试着寻找答案.

避免依赖任何特定的实现

前面的情形在软件工程中十分常见.在有些情况中,这样的情形会导致较大的投资与较长的延期.当不了解所有后果就作出决定而且决策制定人不太走运或缺乏必需的经验时,就常常会发生这种情况.

可将该情形概括如下:

您需要某种提供者

您没有选择最佳提供者的客观标准

您希望能用最低的成本来评估所有的待选项

所作的决定不应将您束缚在所选的提供者上

这一问题的解决方法是使代码更加独立于提供者.这引入了新的层 ? 同时去除客户机与提供者的耦合的层.

在服务器端开发中,很容易找到使用该方法的模式或体系结构.下面引用一些示例:

对于 j2ee,您主要关注如何构建应用程序而不是应用程序服务器的细节.


...   下一页
 ·创建java中的线程池    »显示摘要«
    摘要:线程是java的一大特性,它可以是给定的指令序列、给定的方法中定义的变量或者一些共享数据(类一级的变量)。在java中每个线程有自己的堆栈和程序计数器(pc),其中堆栈是用来跟踪线程的上下文(上下文是当线程执行到某处时,当前的局部变量的值),而程序计数器则用来跟踪当前线程正在执行的指令。 在通常情况下,一个线程不能访问另外一个线程的堆栈变量,而且这个线程必须处于如下状态之一: 1.排队状态(rea......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE