??xml version="1.0" encoding="utf-8" standalone="yes"?>
2 对swt、jface,有了些了解,对一些常用的昄lg,,command framework有深入了?br />再说服务器端以及交互的协?br />1 对hession webservice了解了一些,但深度有限,只是对其通讯协议Q以及代理方式有些浅昄看法
2 jabber协议Q这是我收获最大的地方。对jive的smack客户端API有些研究
3 wildfire, 单独提它是因为我太崇拜其开发者的功力了!
应该q是开发jive的原班h马,特别是其Ҏ件编E的支持Q真是没的说。你可以用很的一些代码便可以为wildfired很强大的功能。比如聊天客L需要服务器提供用户查找功能Q以便自定义查找一些用P但wildfrie本n没有提供q个原本是jabber协议规定的功能,但只需?00~600行的代码Q就可以为wildfire提供q个功能?br /> wildfire为其插g提供了所有能够想到的方便Q可以在插g中定义控制台昄的tab,操作菜单。支持动态加载、卸载插件。。?br /> wildfire大量q用了singleton,factory method,Observer,chain of responsibility,{模式,比jive中的更加合理Q这使得在wildfire下开发变得很舒服、很单?br /> wildfire内置jetty,Z加蝲插gQ它自己定义了一套Classloader
代码下蝲Q?br />http://svn.jivesoftware.org/svn/repos/wildfire
文档介绍Q?br />http://www.jivesoftware.org/wildfire/documentation.jsp
另外Q两q前对p2p 对NAT(network address translation )IK进行数据传输不是很了解Q看了wildfire一些代码,和其他的一些文章,对之有了些认?/font>
]]>
1 定义在常量类?br />
l常到要将枚Dcd成常量用的情况Q这不仅可以相关的帔R定义C个枚丄中,而且q可以利用枚丄强大而又灉|的功能,在加上编译器内置的支持,使得在eclipse下的~程更方便,引入的bug更少?br /> 一般规模的目中都会用一个单独的cL定义pȝ中用到的帔RQv码笔者经历的几个目都是有此U做法,该做法的好处是便于集中理Q虽然这q背cd装的原则Q但鉴于其易用性,我们q是会常常这么做?br /> 例子Q?br />public class SystemConstant
{
/** *//**
* 金库 sourceortarget pȝ相关
*/
public static final String CASHWASTEBOOK_SOURCEORTARGET_SYS = "pȝ";
/** *//**
* 附g上传路径
*/
public static String UPLOAD_ATTACHMENT_DIR="upload\\";
public static String CONFIG_DIR="config\\";
/** *//**
* 临时文g路径
*/
public static String TEMP_DIR="temp\\";
/** *//**
* 会员关系
*/
public static enum Relationship
{
GoodFriend("亲密好友"),
CommonFriend("普通朋?/span>"),
BLACK("不受Ƣ迎");
private String v;
Relationship(String value)
{
v = value;
}
@Override
public String toString()
{
return v;
}
}
public static final String SUCCESS = "OK";
/** *//**用户选择理员登?/span>*/
public static final String MESSAGE_LOGIN_TYPEERROR1 = "您不能选择理员登?/span>";
/** *//**理员选择会员或家长登?/span>*/
public static final String MESSAGE_LOGIN_TYPEERROR2 = "您应该选择理员登?/span>";
/** *//**会员或家镉K复登?/span>*/
public static final String MESSAGE_LOGIN_REPEAT = "可能因ؓ以下原因Q您无法登陆pȝ\n\tQ 有h盗用您的帐号\nQ 您的{0}正在使用本帐?/span>";
public static final String MESSAGE_LONGIN_PASSWORDERROR = "用户名或密码无效";
public static final String MESSAGE_INSUFFICIENT_FUNDS = "您的帐户余额不";
public static final String MESSAGE_MEMBER_ONLINETIME_FULL = "您今日的累计上线旉已超q1.Q小?/span>";
/** *//**会员每天最大登录时限 单位分钟 默?0**/
public static final int MEMBER_MAX_DAY_ONLINE_MINUTES = 90;
}
可以看到Q枚丄型Relationship是定义一些会员关pM间的东东Q其实我可以把它单独定义一个类Q或者放到Member(会员)q个cMQ但l合考虑Q我q是觉得攑ֈSystemConstant比较好,q且今后重构SystemConstantQ会d从xml文gd属性的功能?br /> 虽然Relationship是一个内部类Q但׃是静态的Q所以可以直接import,而无Lơ都用SystemConstant.Relationship;
例如Q?br /> public Relationship getRelationship() {
return Relationship.valueOf(relationship);
}
2 说到从xml文gd属性来动态配|枚丄Q我下面׃D个例子,演示演示
一些webpȝ中涉及到文g上传Q根据文件类型显C相应图标,q且有些jsp,asp{等的文件不允许上传Q下面就是一个满U需求的枚Dc,它最大的特点是可以从xml中读取配|信?br />/** *//**
* pȝ中用到的文g扩展名 枚丄
* @author zgy
*
*/
public enum FileExtension
{
doc, jsp, jpeg, jpg, rar, zip, txt,unknown;
private boolean allow;
private String comment;
private String iconPath;
static
{
loadFromXml();
}
FileExtension()
{
this.iconPath = "\\" + name();
this.allow = true;
this.comment = "comment for" + name();
}
/** *//**
* 从config目录中load
*
*/
private static void loadFromXml()
{
try
{
Document doc = XmlUtil.parseXmlFile(SystemConstant.CONFIG_DIR
+ "fileExtension.xml");
NodeList extensionList = doc.getElementsByTagName("FileExtension");
for (int i = 0; i < extensionList.getLength(); i++)
{
Element item = (Element) extensionList.item(i);
String name = item.getAttribute("name");
FileExtension em = FileExtension.valueOf(name);
em.allow = Boolean.parseBoolean(item.getAttribute("allow"));
em.iconPath = item.getAttribute("iconPath");
em.comment = item.getAttribute("comment");
}
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
public boolean isAllow()
{
return allow;
}
public String getComment()
{
return comment;
}
public String getUploadIcon()
{
return iconPath;
}
public static void main(String[] args)
{
System.out.println(FileExtension.doc.comment);
}
}
配置文g如下Qconfig/fileExtension.xml
<?xml version="1.0" encoding="UTF-8"?>
<FileExtensions>
<FileExtension name="doc" iconPath="doc.jpg" allow="true" comment="文本"/>
<FileExtension name="jpg" iconPath="jpg.jpg" allow="true" comment=""/>
<FileExtension name="jpeg" iconPath="jpeg.jpg" allow="true" comment=""/>
<FileExtension name="rar" iconPath="rar.jpg" allow="true" comment=""/>
<FileExtension name="zip" iconPath="zip.jpg" allow="true" comment=""/>
<FileExtension name="txt" iconPath="txt.jpg" allow="true" comment=""/>
<FileExtension name="jsp" iconPath="jsp.jpg" allow="false" comment=""/>
</FileExtensions>
可能pȝ中其他的一些枚丄Q比? 中提到的RelationShipQ也会用到非常类似的做法Q这时候我们就可以重构了,一些共同的特点抽取C个抽象类中。这会在以后的文章中提到?br />有不同的观点Q请联系come2u at gmail.com ,Ƣ迎交流?br />
]]>
其中0~127, int 与byte的二q制表示是相同的.
-128~-1 ?与byte的二q制表示相同的int?28~255
举例: -1: byte的二q制表示?11111111
255int 的二q制表示?11111111,
于是,如果转换-128~-1之间的数,我们只需加上如下操作
( (byte)bb)&0xff.
bb是Q意byte? ?xff做ƈ操作,二进制表CZ?但同时别转换成intcd
2一个byte数组转化?6q制表示的串
[本篇全文] [回复文章] [回信l作?/font>] [本篇作者:stevencheng] [q入讨论?/font>] [q回剙] | 1 |