2008年11月18日星期二

用Java实现HTTP文件队列下载

 
 序言

  许多用户可能会遇到这样的情况:在网站上发现一个很好的资源,但是这个资源是分成了很多个文件存放的,如果想把它保存到本地,只有靠用户点击另存来完成保存,如果资源分了几百甚至上千上万,那简直是个灾难。

  在Internet上很多的资源分成多个文件存放时,它的文件命名是有一定的规则的;正因如此,我们就可以用程序来完成这个资源的完全下载。

  1. 基础知识

  在Internet上,我们要下载网站上的某个资源,我们会获得一个URL(Uniform Resource Locator),它是一个服务器资源定位的描述,下载的过程总是如下步骤:

  步骤1:客户端发起连接请求一个URL

  步骤2:服务器解析URL,并将指定的资源返回一个输入流给客户

  步骤3:客户端接收输入流,将流中的内容存到文件

  2. 网络连接的建立

  Java提供了对URL访问和大量的流操作的的API,我们可以很容易的完成对网络上资源的存取,下面的代码段就完成了对一个网站的资源进行访问:

......
destUrl="http://www.ebook.com/java/网络编程001.zip";
url = new URL(destUrl);
httpUrl = (HttpURLConnection) url.openConnection();
//连接指定的网络资源
httpUrl.connect();
//获取网络输入流
bis = new BufferedInputStream(httpUrl.getInputStream());
......

  3. 代理的访问

  Java 中通过代理服务器访问外网的方法已经是世人皆知的秘密了。这里就不再多描述了,访问的JAVA代码如下:

//设置代理服务器
System.getProperties().put("proxySet", "true");
System.getProperties().put("proxyHost", "10.154.134.110");
System.getProperties().put("proxyPort", "8080");

  4. 网络资源的保存

  在上节中,我们已经获取了指定网络资源的输入流,接下来我们要完成的就是读取输入流中的所以内容,并将其保存在文件中。示例代码:

......
fos = new FileOutputStream(fileName);
if (this.DEBUG)
System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件[" + fileName +"]");

//保存文件
while ( (size = bis.read(buf)) != -1)
fos.write(buf, 0, size);
......

  上面的示例代码就将网络资源的内容保存到了本地指定的文件中。

  5. 代码清单

import java.io.*;
import java.net.*;
import java.util.*;

/**
* <p>Title: 个人开发的API</p>
* <p>Description: 将指定的HTTP网络资源在本地以文件形式存放</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: NewSky</p>
* @author MagicLiao
* @version 1.0
*/
public class HttpGet {

  public final static boolean DEBUG = true;//调试用
  private static int BUFFER_SIZE = 8096;//缓冲区大小
  private Vector vDownLoad = new Vector();//URL列表
  private Vector vFileList = new Vector();//下载后的保存文件名列表

  /**
  * 构造方法
  */
  public HttpGet() {}

  /**
  * 清除下载列表
  */
  public void resetList() {
   vDownLoad.clear();
   vFileList.clear();
  }

  /**
  * 增加下载列表项
  *
  * @param url String
  * @param filename String
  */

public void addItem(String url, String filename) {
  vDownLoad.add(url);
  vFileList.add(filename);
}

  /**
  * 根据列表下载资源
  */
public void downLoadByList() {
  String url = null;
  String filename = null;

  //按列表顺序保存资源
  for (int i = 0; i < vDownLoad.size(); i++) {
   url = (String) vDownLoad.get(i);
   filename = (String) vFileList.get(i);

   try {
    saveToFile(url, filename);
   }
   catch (IOException err) {
    if (DEBUG) {
     System.out.println("资源[" + url + "]下载失败!!!");
    }
   }
  }

  if (DEBUG) {
   System.out.println("下载完成!!!");
  }
}

/**
* 将HTTP资源另存为文件
*
* @param destUrl String
* @param fileName String
* @throws Exception
*/
public void saveToFile(String destUrl, String fileName) throws IOException {
  FileOutputStream fos = null;
  BufferedInputStream bis = null;
  HttpURLConnection httpUrl = null;
  URL url = null;
  byte[] buf = new byte[BUFFER_SIZE];
  int size = 0;

  //建立链接
  url = new URL(destUrl);
  httpUrl = (HttpURLConnection) url.openConnection();
  //连接指定的资源
  httpUrl.connect();
  //获取网络输入流
  bis = new BufferedInputStream(httpUrl.getInputStream());
  //建立文件
  fos = new FileOutputStream(fileName);

  if (this.DEBUG)
   System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件[" + fileName + "]");

  //保存文件
  while ( (size = bis.read(buf)) != -1)
   fos.write(buf, 0, size);

  fos.close();
  bis.close();
  httpUrl.disconnect();
}

/**
* 设置代理服务器
*
* @param proxy String
* @param proxyPort String
*/
public void setProxyServer(String proxy, String proxyPort) {
  //设置代理服务器
  System.getProperties().put("proxySet", "true");
  System.getProperties().put("proxyHost", proxy);
  System.getProperties().put("proxyPort", proxyPort);
}

/**
* 设置认证用户名与密码
*
* @param uid String
* @param pwd String
*/
public void setAuthenticator(String uid, String pwd) {
Authenticator.setDefault(new MyAuthenticator(uid, pwd));
}

/**
* 主方法(用于测试)
*
* @param argv String[]
*/
public static void main(String argv[]) {
  HttpGet oInstance = new HttpGet();
  try {
   //增加下载列表(此处用户可以写入自己代码来增加下载列表)
   oInstance.addItem("http://www.ebook.com/java/网络编程001.zip","./网络编程1.zip");
   oInstance.addItem("http://www.ebook.com/java/网络编程002.zip","./网络编程2.zip");
   oInstance.addItem("http://www.ebook.com/java/网络编程003.zip","./网络编程3.zip");
   oInstance.addItem("http://www.ebook.com/java/网络编程004.zip","./网络编程4.zip");
   oInstance.addItem("http://www.ebook.com/java/网络编程005.zip","./网络编程5.zip");
   oInstance.addItem("http://www.ebook.com/java/网络编程006.zip","./网络编程6.zip");
   oInstance.addItem("http://www.ebook.com/java/网络编程007.zip","./网络编程7.zip");
   //开始下载
   oInstance.downLoadByList();
  }
  catch (Exception err) {
   System.out.println(err.getMessage());
  }
}
}



[广告] 金秋最关注楼盘-房不胜房

2008年11月17日星期一

java里 equals和== 区别

equals 只是比较值是否相同
而==则是比较两个变量 是不是同一个变量,也应时是说
要看看这两个变量是不是引用的同一个地址,
java 中只有引用地址相同的两个变量才被视为==
如果明白值传递与地址传递的话,这个问题应该不难理解
 
举个例子
String s1 = "Hello";
String s2 = "Hello";
if (s1 == s2)
{
System.out.println("s1 = s2");
}

String t1 = new String("Hello");
String t2 = new String("Hello");
if (t1 == t2)
{
System.out.println("t1 = t2");
}

我们知道进行字符串比较需要使用字符串对象String的equals方法。这是
因为操作符 == 进行的是狭义上的比较,而方法equals进行的是广义上的
比较。也就是说,操作符 == 比较的是引用,而方法equals比较的是被引
用的值。用C/C++的术语来说,操作符 == 比较的是指针的值,方法equals
比较的是被指针指向的值。

根据以上认识,我们会认为上述程序片断运行时肯定不会打印s1 = s2,
因为字符串s1和s2是两个不同的String对象,其引用应该是不同的。但是
这样的想法是错误的,因为程序运行时却是打印了s1 = s2。

Java通过重新利用相同的字符串对象从而达到节约系统资源的目的。由于
s1和s2的内容完全相同,因此s1和s2在内存中的地址是完全相同的。正是
因为这样的原因,s1 = s2成立。

那么t1和t2是否象等呢?他们的内容也完全相同。

答案是否定的,因为操作符new强制为t1和t2重新生成新的字符串对象,而
不是重新利用现有的具有相同内容的字符串对象。因此t1和t2在内存中的
地址是不同的,其引用也是不同的。因此,t1 = t2不成立。

2008年11月12日星期三

学java得这样学,学习东西确实也得这样(转载)

软件开发之路是充满荆棘与挑战之路,也是充满希望之路。Java学习也是如此,没有捷径可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一 甲子功力,是很不现实的。每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了"东方 不败",倒是成"西方失败"的几率高一点。
    "不走弯路,就是捷径",佛经说的不无道理。
    1.如何学习程序设计?
    Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。有编程高手认为,Java也 好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设 计理所当然也有许多共通的地方。
  1.1 培养兴趣
    兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做 白日梦,但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭 空多出个"食利阶层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐观幽默,时不时会冒出智慧的火花。
    1.2 慎选程序设计语言
    男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落。
如 果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期 进入电信软件开发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。
如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。
  1.3 要脚踏实地,快餐式的学习不可取
  先分享一个故事。 
  有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞。有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了 几天以后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。 这个小孩看着看着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。
    这个故事给我们的启示是:欲速则不达。
    浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样,都想大步跨入***主义社会。现在的软件公司、客户、政府、 学校、培训机构等等到处弥漫着浮躁之气。就拿我比较熟悉的大连大工IT职业培训来说吧,居然打广告宣称"20多年的计算机职业教育,辽宁省十佳学校",殊 不知中国计算机发展才几年,软件发展才几年,居然去报名的学生不少,简直是藐视天下程序员。培训出来的"程序员"大多不知道OO,OP为何物?社会环境如 是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者C++/Java没开始学,立马使用VC/JBuilder,会使用 VC/JBuilder开发一个Hello World程序,就忙不迭的向世界宣告,"我会软件开发了",简历上也大言不惭地写上"精通VC/Java"。结果到软件公司面试时要么被三两下打发走 了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧起《C++编程思想》《Java编程思想》仔细钻研,早知如此何必当初呀。
"你现在讲究简单方便,你以后的路就长了",好象也是佛经中的劝戒。
  1.4 多实践,快实践 
    彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。
  从前,四川边境有两个和尚,一个贫穷,一个有钱。一天,穷和尚对富和尚说:"我打算去南海朝圣,你看怎么样?"富和尚说:"这里离南海有几千里远,你靠什 么去呢?"穷和尚说:"我只要一个水钵,一个饭碗就够了。"富和尚为难地说:"几年前我就打算买条船去南海,可至今没去成,你还是别去吧!" 一年以后,富和尚还在为租赁船只筹钱,穷和尚却已经从南海朝圣回来了。
这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周 全之后,再去干事情。假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。软件开发是一门工程学科,注重的就是实践,"君子动口不动手"对软件开发人 员来讲根本就是错误的,他们提倡"动手至上",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有时候蓬头垢面的一副"比尔盖茨"样。有前辈高人认为,学 习编程的秘诀是:编程、编程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书 的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。
    1.5 多参考程序代码
    程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要 以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息。
    多多参考代码例子,对Java而言有参考文献[4.3],有API类的源代码(JDK安装目录下的src.zip文件),也可以研究一些开源的软件或框架。
  1.6 加强英文阅读能力
    对学习编程来说,不要求英语, 但不能一点不会,。最起码像Java API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学Java的同时学习 英文,一箭双雕多好。另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理 层,进而可以成为剥削程序员的"周扒皮"。
    1.7 万不得已才请教别人
    笔者在Martix与Java论坛的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决。请教别人之前,你应该先回答如下几个问题。
    你是否在google中搜索了问题的解决办法? 
    你是否查看了Java API文档?
    你是否查找过相关书籍?
    你是否写代码测试过?
    如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。
    1.8 多读好书
      书中自有颜如玉。比尔盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比尔盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可以说比尔?茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。
笔 者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱怨,"天呐,这么多书到什么时候才能看完了","学软件开发,感觉上了贼船 "。这时候,我的回答一般是,"别着急,什么时候带你们去看看我的书房,到现在每月花在技术书籍上的钱400元,这在软件开发人员之中还只能够算是中等的 ",学生当场晕倒。(注:这一部分学生是刚学软件开发的)

    1.9 使用合适的工具
    工欲善其事必先利其器。软件开发包含各种各样的活动,需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没 有工具帮忙可以说是寸步难行。工具可以提高开发效率,使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中 无剑心中有剑这样的境界几乎不可企及。
    2.软件开发学习路线 
    两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。
从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计师→架构设计师或项目管理师。不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术。
    A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非不重要。如不想成为计算机科学家的话,可以采取"用到的时候再来学"的原则。
    B.一门编程语言,现在基本上都是面向对象的语言,Java/C++/C#等等。如果做WEB开发的话还要学习HTML/JavaScript等等。
    C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。由此而衍生的基于组件开发CBD/面向方面编程AOP等等。
    D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等
    E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。
    F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。
    G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化。当然还有其他的一些软件工程知识。
    H.项目管理、体系结构、框架知识。
    正确的路线应该是:B→C→E→F→G→H。
    还需要补充几点:
    1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。新技术虽然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理 论与编程思想的变化却很慢。掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一,在上面需要多投入时 间,给你的回报也会让你惊喜。
  2).对于数据库来说是独立学习的,这个时机就由你来决定吧。
  3).编程语言作为学习软件开发的主线,而其余的作为辅线。
  4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计师着重于C、F、H。
  3.如何学习Java?
  3.1 Java学习路线
      3.1.1 基础语法及Java原理
    基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习Java也是如此,必须要有扎实的基础,你才能在J2EE、 J2ME领域游刃有余。参加SCJP(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努 力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起, 就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得"真正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要 走。
      3.1.2 OO思想的领悟 
  掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是 CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。
使用面向对象的思想进行开发的基本过程是:
    ●调查收集需求。
    ●建立用例模型。
    ●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。
    ●细化分析模型到设计模型。
    ●用具体的技术去实现。
    ●测试、部署、总结。
    3.1.3 基本API的学习
    进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需要重新发明轮子"。我们可以利用现成的类、组件、框架来搭建我们的应 用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类 中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的 类该如何使用吧。他们只能提供文档给我们查看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。
    基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查Java DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。
    3.1.4 特定API的学习
    Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需 要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要 熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。
    3.1.5 开发工具的用法
    在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急 于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力。过了这一阶段你就可以开始熟悉 IDE了。
程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有 专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。在JBuilder、 Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新 等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要 用到的几乎所有工具。
    从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。
    Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder 占有的市场份额是最大的。JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的 Java IDE大战中,以其快速的版本更新击败IBM的Visual Age for Java等而成就一番伟业。IBM在Visual Age for Java上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓"柳暗花明又一村"。浴火重生的Eclipse以其开放式的插件 扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。
    3.1.6 学习软件工程
    对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软件工程的必要性才会体现出来。参见"软件开发学习路线"小节。
    3.2学习要点
    确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。
    3.2.1勤查API文档
    当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用"Javadoc"工具(包含在JDK中)生成标准的Java DOC文档,供同行使用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:http://Java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜索CHM版本下载。也可以在线查看:http://Java.sun.com/j2se/1.5.0/docs/api/index.html
    对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。
    当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
  ●找特定的包,包一般根据功能组织。
  ●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
  ●选择构造器,大多数使用类的方式是创建对象。
  ●选择你需要的方法。
    3.2.2 查书/google->写代码测试->查看源代码->请教别人
  当我们遇到问题的时候该如何解决?
  这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。 而像"某些类/方法如何使用的问题",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看 API的源代码验证你的想法。万不得已才去请教别人。
    3.2.3学习开源软件的设计思想
    Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物 店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一 个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。
    3.2.4 规范的重要性 
    没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.jcp.org下 载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;同时, 没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。Java编 码规范到此查看或下载http://Java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。
    3.2.5 不局限于Java
    很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
    Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。 如学习Java集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则。
    4.结束语
    需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java神殿之外的朋友有所帮助 的话,笔者也欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小老头了。最后奉劝各位程序员尤其是MM程序员,完成工作后赶 快远离电脑,据《胡播乱报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比…… 拖起明天的梦想还得靠自己!

2008年11月11日星期二

群发短信价格揭秘

一般谈价格三个方式

1. 按照所有号码或号码段,空号、停机号码、假号码都包含在内,这个价格最便宜,也是通常大家说的2分钱一条的;

2.    按照是否发送成功谈价格,这个价格最能蒙人最能忽悠的,一般个人的群发器几乎都显示发送成功。空号、停机号码、假号码都包含在内,都可以显示发送成功,当然价格稍微高点,水分最多,和2分钱一条的没多大区别;

3.    按照最近实时在线号码或空号软件检测的号码发送成功的可能好点,成功率比较高,但是价格相对比较高。关机的刚停机的号码就无法接收到了,特别是节假日休息时间等关机的这个比例更多。关机的刚停机的一样显示成功发送!更关键的是谁来保证是否是最近实时在线号码的真实性和空号检测结果的权威鉴定,现在打停立即换号十分频繁;

4.    按照成功接收数量收费是比较有价值的,这个真实结算价格不会低于6分钱,标准收费是1毛-1毛5。低于结算价格6分的绝对有水分,因为没有哪一个运营商或者代理赔钱赚吆喝!关机又开机、停机又缴费开通的号码都可以在24小时内收到短信。只有在24小时后统计的结果才是真实的!这种原理就是手机上的短消息报告功能,24小时内用户接收到了短信就会发送给主叫号码一个回复,没有接收到就不回复,系统也就不计费。检测时间可以设置1小时或12小时或24小时或48小时。一般个人的群发器或软件都很难做到!

5.目前接收成功率统计:运营商级别的短信群发系统按照全部号码的15-30%是发送成功率,发送成功号码的30-60%是成功接收率!

6.提供成功发送、成功接收统计报告和详细发送明细单,就像手机电话通话详单一样,那才是真实的东西,然后打电话抽查检测是否接收到了,这样不会多花冤枉钱

例如:群发10万号码,每条2分合计是2000元,按照接收成功率也就是2万条,每条6分合计1200元。比较一下可以节省800元,合计每条1分2!哪种方式更省钱大家明白了吧!

以上观点仅供参考!

2008年11月7日星期五

利用迅雷做下载资源站

是框架广告,而前面的方法目前国内最大的资源下载平台,但迅雷本身并没有资源,迅雷提供的是资源其时都来源于网络上的资源站。迅雷与资源站之间是一种双嬴的合作模式,资源站提供资源给迅雷。迅雷为这些资源站带去流量。一个被审核通过的本地资源站,在资源足够多的情况下,一天通过迅雷获取几万个IP的流量是很轻松的事。不过,这种迅雷流量质量都有很差,因为通过迅雷访问这些站的网民其目的的性都很单一,就是为了下载资源,除了下载资源他们什么都不感兴趣。所以,这每天几万的IP无论是投放点击类广,推介类广告或者弹窗广告,效果都很差,基本上没有啥收入。迅雷站,一般都是投放框架广告,每万个IP可以获得100~150元的流量。这些框架广告在用户访问这些站点时,就自动地被安装到用户的电脑中。

除了资源下载站外,有些音乐站像百度音乐频道,里面的资源也均是来源于网络。这些音乐资源站也是通过百度音乐家搜索来获取高流量,同时也给百度音乐带来了资源。

那么如何做迅雷资源站呢?步骤如下。

(1)       在迅雷上随意搜索几个关键词,寻找出一些非大型的资源下载站作为模仿的网站。

(2)         使用论坛程序制作下载站,因为网站简单明了。很容易通过迅雷联盟的审核。

(3)         模仿的网站上有什么资源我们就复制什么资源,可以同时复制两个站的资源。

(4)         主要选择一些RAR文件格式的下载资源站。

(5)       对本站进行适当的宣传,然后提交迅雷联盟。

(6)         通过迅雷联盟审核后,流量就会源源不断地流进这个网站

(7)       在网页里面投放框架广告。

(8)       本站服务器上的RAR资源全部重新解压缩,在压缩文件里面放入广告页快捷链接。

(9)       迅雷资源的盗链是很疯狂的,很快你的站点资源就会被人疯狂地下载。

这个方法与前面介绍的利用小于5M资源做下载站的方法是有区别的。

(1)                  本方法是依赖的是巨的迅雷搜索流量,所以本站资源不是只选择小的,而是选择热门的。

(2)                  迅雷是不允许在RAR文件里投放广告的,所以只能是在通过审核以后悄悄地放入。

(3)                  本方法不仅网页有流量,资源也有下载量,而前面介绍的方法网页上没有流量,但是资源有下载。

(4)                  本方法核心嬴利核心嬴利是靠压缩文件里的广告。

利用盗链每天获取500元

如果认识做电影或下载类资源站的站长,问一下他们最烦恼的事情是什么?他们会回答多数是资源被盗链,导致服务器运行缓慢。盗链是资源类网站站长 最头疼的事情,盗链防不胜防,再好的防盗链技术也会被人破解。所以想做好资源类的下载站,首要问题就是防盗链,解决好这个问题,站上的资源等于是为别人创造的。]

现在做电影或者资源站时,首先想到的也是去盗链他站的资源。网络上大部分下载站,都是盗链他站的资源。一个站如果没有很好的防盗链的技术,普通服务器不用一周就会被盗链网站拖垮。而本身却不能获得任何流量,自己辛苦租了服务器却为他人作嫁衣。于是,网络上就形成了一个恶性循环。与其自己创建本地资源被人盗链,还不如自己也去盗链别人的资源。这样,越来越多的站长放弃了使用自己服务器资源,而盗链别人的资源。

有什么办法可以全理地利用这些疯狂盗链子者的流量呢?下面的方法可以借鉴一下:

(1)       按月租赁服务器,这样费用比较低,一个月几百块钱就可以租赁到VPS

(2)       寻找一些比较热门的下载资源列表,挑选出小于5MB的资源。单介资源越小,被下载的总人数就越多。

(3)       制作一个论坛。论坛的每个帖子是一个下载资源。直接给出资源的目录。

(4)       对每个资源都进行压缩包装,在压缩以前,在文件里面加上自己的广告页快捷链接。命名为"免费电影。html''.

(5)       不断地添加新资源,每个资源都按上一步进行压缩包装。

(6)       这些资源很快就会被别的网站盗链。因为网络上有大量的扫描软件,可以自动扫描资源。

一些-常用软件每天被下载次数要超过10万次,别人一旦盗链。廉洁给帮助你宣传广告页,所以斧广告页每天都会被几万人浏览。一般情况下,一台VPS虚拟服务器每天可以带来到5万个IP 才一分钱左右的收入,5万个IP z约有500元的收入。不过相比VPS服务器一个月租赁费350元来说。还是有的赚的。

这就是利用网络上的盗链行为来嬴利的例子,适全每个朋友操作项目,因为资源永远都不过剩,短时间内网络人也改变不了盗链的习惯,所以这个流量技巧在几年甚至更长时间内仍然有效。当然我们更应该学习这种变害为利的思维模式。再举一个例子。

铁血论坛,是一个著名的论坛,里面的文章大多都是原创的,这些文章会被大量的转载。于是论坛就作了一个设置,当文章被转载时,会自动在文章的段落里加上一句"该文章转铁血论坛,网址是www.tiexue.net".像起点文学网也有类似的设置[ 也是一个利用网络"借用"行为来做宣传的例子。

对于"利用盗链来获得收入"的项目,有些新手看了以后能明白其中的道理,却认为自己做不起来,究其原因是以为自己不懂技术,操作起来难度太大。这是一种错误的思维模式!在网络赚钱过程中,技术是相对次要的环节,自己做不了的事情,要学会借助别人的力量来完成,绝对不能以"自己不懂技术工农个理由而不思进取。网赚行业,很多高手都是不懂技术的,但是他们懂得运营人才来实现自己的想法,就如同卖鸡蛋的人不一定要懂的母鸡是如何下蛋的一样

挂QQ日收入5000元

现在上网的人基本上都有QQ号,QQ号已z经成为上网的必需装备。很多人都用过QQ搜索功能搜索异性朋友,尤其是男性朋友。经常通过QQ搜索功能来查找同城的女性,相对而言,男性QQ每天被女性搜索到的几率不大,因为女性很少主动搜索男性。曾经有一个有趣的统计,一个女性QQ保持在线一天,在约会被20个男性请求加为好友,很明显,在加好友前,这些男性通常会查看一下女号QQ的个人资料。 这点就是我们要加以利用。

如果有100个女性QQ号,QQ号上的地理位置设置为不同的城市,在个性说明里,设置上广告,那么每天就能带来2000多个IP的流量,如果有1000个这样的QQ号,每天就可以带来2万个IP 的流量。如果有10000个这样的QQ 号,每天就可以带来20万个IP 的流量,这些流量如果做短信联盟广告的话,每天20万个IP的流量带来的收入是每天8000元以上。看到这里,有人就会问了。真的会有那么高的收入吗?你到哪儿去弄这么多的QQ号呢?全靠申请不可能吧!

其时,上面所说的这些是2006年下半年一群网赚人真实收入的写照,当时这群人平均每天的收入都在2000元以上,高的甚至达到每天上万元。他们都是去淘宝上购买QQ号,便宜的1000QQ号大约15元。贵的也有一元每个QQ号。一台机器使用NOOPENQQ或者TENYQQ可以挂约1500QQ,同时在网吧里挂着。只要把这些QQ资料修改为女性。同时在个人资料中加上广告地址,再用软件把这些QQ挂起来保持在线。能够被人查找到,后面就不需要管什么了。只需要坐在家里数数钱就行了。

曾经在QQ上搜索过女性的朋友。过去肯定经常搜索到一些在个人资料里面带有广告网址的QQ其时这些都是广告QQ。据推测。平均每3个在线的女性QQ中就有一个是广告QQ,可见在当时挂QQ是多么的疯狂。当然,这已经是一个过时的技巧了,因为腾讯推出了新的政策,限制了一个IP地址登陆QQ的个数。同时还改变了查找结果中QQ出现的规则,所以使用这种方法获取流量的难度也越来越大了。

我们要了解这种方法的原理,以方便应用在其它地方。因为人们在网络上并不非全聚集在QQ上,其他有流量的软件或者网站,也应该是可以采取这个原理来获取流量。仔细分析一下可以看出。其原理就是简单地利用搜索源的方式来获取流量,也就是说,人们平时喜欢搜索什么,那么就通过人海战术去创造数量庞大的目标等待搜索,从而产生流量。在网络上,男性搜索女性的频率是最高的。下面延伸几个实例:

(1)              在一些异性交友论坛里面,一般都是男性发很多交友信息,女性是很少发交友信息的。但有个人发了一个帖子,标题是"本人找寻男性朋友交流,有兴趣的进",帖子内容是"本人32岁,自己拥有一家公司,寻找长期上网的的男性朋友交流,本人QQ号是XXXXXXX,有兴趣的朋友可以跟帖留下你的QQ号,因为有人不停的跟帖,所以这个帖子一直排在第一页第一名。通过这种方式也就获取了很高的流量。在一个比较火热的异性交友论坛,一个类似的帖子一天就可以带来1000IP以上的流量,而且都是高质量的IP ,做短信注册类或者'亚交'类广告,也可以带来百多块钱的收入,

(2)              在百度空间里也有一个查询系统,可以查询当地女性朋友的百度空间,于是就有人做了大量的当地女性资料的百度空间,然后在空间资料里面投放上广告,等待百度空间的用户主动过来搜索,这个方法也可以获取大量的流量,

在前面几节里提到的利用交友中心做流量的技巧,其实本质上也是创造搜索源来等待被查找而获取流量。

技巧总结:根据网络用户的搜索习惯,创造其需要的众多搜索目标以获取流量。这个方法适合于任何一个具有查询系统或者搜索功能的软件或者网站,

再延伸两面三刀个例子:

(1)              在网上,经常会遇到一些招商者的手机号或者是联系电话等,有些网民会习惯性地搜索一下。看看招商者在网络上发布过什么信息,他在网络上是干什么的。别人对他的评价如何;有时接到一些陌生电话,我们也会想搜索一下这个电话是哪里的;有时我我们还会把一些手机号码在搜索引擎里输入一下,想看看这个号码的归属地。但是,手机是属于个人隐私性的东西,一般在网络上搜索不出结果,可手机号码每天搜索量还是巨大的。假如我们做一个站。把每个手机号码都产生一个页面,当这个站收录的时候,无论搜索什么手机号码时,这个站都被搜索出来的。于是大家就会习惯性地点开看一下,这就会带来的流量。这也是一种创造搜索 源的例子,有兴趣的朋友可以把这个站操作起来。

(2)              我们出行的时候,可能会查询一下出发地到目的地之间的路线。比如,笔者想开车从日照到拉萨,就会在网上搜索一下这两个地名,可是搜索像日照到拉萨这类信息,往往没有搜索结果。因为一些非热门城市之间的交通线路很少有人去关注。那么我们就可以把国内的任意两个城市进行组合,每组合一次产生一个网页。这样无论搜索搜索两个城市之间的线路时,这个站都会出现在第一位。因为除了这个站网络上没有别的搜索结果,这样该站也可以获取大量的流量。可以做成自驾游系列的网站。当然,把全国所有城市都组合进来。信息可能过于庞大,可以再作一次筛选。

做网络,掌握一些基本的技巧是有必要的。但更重要的是学会并掌握里面成功的思维模式,只有这样自己才能够灵活运用。得心应手地去驾驭网络。