`
maidingding
  • 浏览: 13497 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

仿佛兮若轻云之蔽月,飘飘兮若流风之回雪

阅读更多

      仿佛兮若轻云之蔽月,飘飘兮若流风之回雪。一种名状,是一种墨迹,一种发自潜意识的。

      请问:大家懂我说的这句话的意思吗?程序员的生活要种诗意,偶尔写写小散文,为什么程序员不能成为诗人呢?

只需要一种名状和意境,平凡的人也可以超神,难道数字和键码是我们全部吗?一个小小的意境,一个小小灵感来之不易,为何不赶快铭刻在心呢?不,刻于心。就像初恋一样,苦涩的味道,一种清甜,远了,但香味依然残留在十指之间。她是如此迷人,深呼一口气品尝她的味道,只有甜味吗?不,一种难咽但难割舍的味道,什么味道都有,怪味豆。不要相信你就是哪个天天吃着天香蚕豆的绝世天人,非也,大神不是你。大神神吗?神,但也不神,有人说我当你是空气,你一定很气,特别是你的小初恋情人说出的,我们需要的是一种心态。为何我就不是那空气。如果我是空气就是大神了。知道什么是大神。不做解释,老年纪了就问问朋友。大神是种名状,已融掉了。但是确实很牛B,但又是那么平凡你天天感受的到他的存在的。空气知道了吗?不知道你就非人类。但是这个世界我是没见过的,不知道那么大神见过。每每呼吸一口空气,我就听的到自己的心跳在还在跳,大神就是能带你给你心跳的人。你吸入他,他融入了你那么你牛了,功底不错。如果你没能融入他,那么他也不伤害你,只是你可能哮喘了,瓶颈了。”这么“办。千万在别在来个小高血压,那么你的小命不保,人生到头了。呼出了他,是二氧化碳了,废气吗?no(弄:no的意思),还可以光合作用。他是如此的好,人人爱,想爱都不行,除非你想少活几年。死到不会,拿空气来第一人称。简述完毕:大神概念。是丰功伟业吗?弄:平凡的无处不在,但你天天感受的到,缺他不可,就这么缺他不可,是多少人的梦,不是:是在睡觉时的那种不名状的笑。

     1,2,3,4....哒地,哒等哒,哒地哒等哒,妹妹我一定要得到你,你就是我今生的唯一,只要我还能继续呼吸,我就,我就,不会轻易的放弃你。

     本来是写给一个女孩的,但是又和工作联系上了,没发成,就发这里,本想用优美的文字来表达,听着音乐双手就像弹钢琴一样,十指休闲的在那块富有弹性的方格区,跳起了优美的华尔兹。由于华尔兹很优美,没加入幽默的街舞味道,请原谅,我不能破坏了这优美的舞姿。

     专业的事用大神的心态对待,用高度兴趣的态度完成专业的事情。(职业的游戏竞技手,专业吧,还是权威的,在专业上吗?在兴趣上,游戏是娱乐,但是真要你成为职业手,你未必很快乐,也许就是痛苦。游戏好玩,但不要被游戏玩了。)

     那天失去了兴趣怎么,苦脑,郁闷,做为男人有什么苦脑的,pass。郁闷,男人,女人都有的。弄:什么男人和女人都的,郁(欲:想要的意思),(闷:man:男人的意思)。大家跟我一起连起来说一遍:想要男人。作为男人的我们:怎么能郁闷,郁闷,郁闷,郁闷那不是女人干的事吗,我们什么时候说郁闷了。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 



 java  多线程下载工具的小小实现。


源码在里头,里头哪里?你懂的,javaeye老规矩。呵呵。。。

扯谈太多,懒得对源码的解释,请原谅!!!共享下。。。。 

package org.crazyit.flashget.thread;

import java.io.File;
import java.io.RandomAccessFile;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import org.crazyit.flashget.ContextHolder;
import org.crazyit.flashget.DownloadContext;
import org.crazyit.flashget.object.Part;
import org.crazyit.flashget.object.Resource;
import org.crazyit.flashget.state.Finished;

public class DownloadHandler {
	
	public static Map<String, Timer> timers = new HashMap<String, Timer>();
	
	public void stopTimer(Resource r) {
		Timer t = timers.get(r.getId());
		if (t != null) {
			t.cancel();
		}
	}
	
	public void doDownload(Resource r) {
		try {
			//设置下载日期
			if (r.getDownloadDate() == null) r.setDownloadDate(new Date());
			r.setState(DownloadContext.CONNECTION);
			//计算出每一块的大小
			int partLength = r.getSize() / r.getThreadSize() + 1;
			//时间计算任务
			CountTimeTask timeTask = new CountTimeTask(r);
			Timer timer = new Timer();
			timer.schedule(timeTask, 0, 1000);
			//将Timer对象放到Map中, key为该资源的id
			timers.put(r.getId(), timer);
			for (int i = 0; i < r.getThreadSize(); i++) {
				int length = partLength;
				//如果是最后一块, 则使用总数来减去前面块的总和
				if (i == (r.getThreadSize() - 1)) {
					length = r.getSize() - i * partLength;
				}
				//创建各个Part对象
				Part p = new Part((i * partLength), length, 0);
				r.getParts().add(p);
				RandomAccessFile rav = new RandomAccessFile(r.getFilePath() + 
						File.separator + p.getPartName(), "rw");
				DownloadThread t = new DownloadThread(r, rav, p);
				//设置线程优先级
				t.setPriority(6);
				t.start();
			}
		} catch (Exception e) {
			r.setState(DownloadContext.FAILED);
			e.printStackTrace();
		}
	}
	
	public void resumeDownload(Resource r) {
		if (r.getState() instanceof Finished) return;
		try {
			CountTimeTask timeTask = new CountTimeTask(r);
			Timer timer = new Timer();
			timer.schedule(timeTask, 0, 1000);
			//将Timer对象放到Map中, key为该资源的id
			timers.put(r.getId(), timer);
			for (int i = 0; i < r.getParts().size(); i++) {
				Part p = r.getParts().get(i);
				RandomAccessFile rav = new RandomAccessFile(r.getFilePath() + 
						File.separator + p.getPartName(), "rw");
				DownloadThread t = new DownloadThread(r, rav, p);
				t.start();
			}
		} catch (Exception e) {
			r.setState(DownloadContext.FAILED);
			e.printStackTrace();
		}
	}
	
	//计算时间任务
	class CountTimeTask extends TimerTask {
		private Resource r;
		public CountTimeTask(Resource r) {
			this.r = r;
		}
		public void run() {
			r.setCostTime(r.getCostTime() + 1);
		}
	}
}

 

============================================================================

 

package org.crazyit.flashget.thread;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.crazyit.flashget.ContextHolder;
import org.crazyit.flashget.DownloadContext;
import org.crazyit.flashget.exception.URLException;
import org.crazyit.flashget.object.Part;
import org.crazyit.flashget.object.Resource;
import org.crazyit.flashget.state.Pause;
import org.crazyit.flashget.util.FileUtil;

public class DownloadThread extends Thread {

	private URL url;
	
	private RandomAccessFile raf;
	
	//下载的资源对象
	private Resource resource;
	
	//本线程需要下载的块
	private Part part;
	
	/**
	 * 下载线程构造器
	 */
	public DownloadThread(Resource resource, RandomAccessFile raf, Part part) {
		this.url = createURL(resource.getUrl());
		this.raf = raf;
		this.part = part;
		this.resource = resource;
	}
	
	private URL createURL(String urlPath) {
		try {
			return new URL(urlPath);
		} catch (Exception e) {
			throw new URLException("create url error");
		}
	}
	
	public final static int MAX_BUFFER_SIZE = 1024;

	public void run() {
		try {
			//计算开始点与结束点
			int begin = part.getBegin() + part.getCurrentLength();
			int end = part.getBegin() + part.getLength() - 1;
			//如果是开始点大于结束点, 证明该块已经下载完成
			if (begin >= end) {
				this.raf.close();
				return;
			}
			HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
			urlConnection.setRequestProperty("Range", "bytes=" + begin + "-" + end); 
			//如果连接不上相应的地址, 抛出java.net.UnknownHostException
			urlConnection.connect();
			//如果找不到相应的资源, 将抛出java.io.FileNotFoundException
			InputStream is = urlConnection.getInputStream();
			byte[] buffer = new byte[MAX_BUFFER_SIZE];
			int perRead = 0;
			//设置状态为下载
			this.resource.setState(DownloadContext.DOWNLOADING);
			//在.part文件中设置当前所读取的指针
			this.raf.seek(this.part.getCurrentLength());
			while ((perRead = is.read(buffer)) != -1) {
				//判断资源对象的状态是否被修改成暂停
				if (this.resource.getState() instanceof Pause) {
					closeStream(is, urlConnection, this.raf);
					return;
				}
				//判断资源对象状态
				raf.write(buffer, 0, perRead);
				this.part.setCurrentLength(this.part.getCurrentLength() + perRead);
			}
			closeStream(is, urlConnection, this.raf);
			//判断是否下载完成, 如果下载完成, 则进行合并文件
			//注意这里需要得到整个文件的大小, 而不是某个.part文件的大小
			if (isFinished(this.resource.getSize())) uniteParts();
		} catch (Exception e) {
			this.resource.setState(DownloadContext.FAILED);
			e.printStackTrace();
		}
	}
	
	private void closeStream(InputStream is, HttpURLConnection urlConnection, 
			RandomAccessFile raf) throws IOException {
		is.close();
		urlConnection.disconnect();
		raf.close();
	}

	/**
	 * 判断是否下载完成, 遍历下载文件的各个.part文件
	 * @param fileLength
	 * @return
	 */
	private boolean isFinished(int fileLength) {
		List<Part> parts = this.resource.getParts();
		//计算已下载的总数
		int downCount = 0;
		for (Part part : parts) downCount += part.getCurrentLength();
		return (downCount >= fileLength) ? true : false;
	}
	
	/**
	 * 合并part文件
	 */
	private void uniteParts() throws IOException {
		List<Part> parts = this.resource.getParts();
		//创建文件输出流, 输出到下载文件
		OutputStream bos = new FileOutputStream(this.resource.getSaveFile(), 
				false);
		for (Part part : parts) {
			//得到.part文件
			File partFile = new File(FileUtil.getPartFilePath(this.resource, 
					part));
			//获得文件输入流
			InputStream is = new FileInputStream(partFile);
            byte[] buffer = new byte[1024];
            int bytesRead;
            int temp = 0;
            while ((bytesRead = is.read(buffer)) != -1) {
            	temp += bytesRead;
            	//写到文件中
                bos.write(buffer, 0, bytesRead);
            }
            is.close();
		}
		bos.close();
		this.resource.setState(DownloadContext.FINISHED);
	}
	
	public static void main(String[] args) throws Exception {
		int threadSize = 5;
		
		Resource f = new Resource("http://www.apache.org/dist/struts/library/struts-2.1.8.1-lib.zip", 
				"C:/test-download", "struts.zip", threadSize);
		ContextHolder.dh.doDownload(f);
	}
}

 

Sorry!上次忘给源码了。 写道
希望对你们有些个帮。。。。

 

  • 大小: 1.3 KB
  • src.rar (24.3 KB)
  • 描述: 源码,上次忘了,望原谅,Sorry!
  • 下载次数: 81
分享到:
评论
6 楼 Reset 2011-06-17  
顺便把断点续传也加上
5 楼 dominic6988 2011-06-17  
这位兄弟,看了你写的散文,感觉你的思维比较乱,让人跟不上,一会天上一会地下一会又云间。
4 楼 wdz567 2011-03-19  
1、楼主三国杀玩多了 而且还是甄宓控
2、楼主的探讨精神很好
3、程序员最高境界在于享受代码之美
4、回来再好好研究 不过迅雷比这个好像还复杂一点。
3 楼 hhj900 2011-03-18  
gougou851129 写道
三国杀玩多了


哈哈,真j洛神啊
2 楼 gougou851129 2011-03-14  
三国杀玩多了
1 楼 程序新手 2011-03-12  
看来楼主之前是一直在潜水,给你顶顶

相关推荐

    观舞记 (2).ppt

    舞蹈中那轻盈的身姿、柔美的动作,正如“皎皎兮似轻云之蔽月,飘飘兮若回风之流雪”,生动描绘了舞者在舞台上如云似风的飘逸。舞者们每一个细腻的动作,不论是悠扬的慢舞还是迅疾的旋转,都融入了力量与柔情的平衡,...

    scratch少儿编程逻辑思维游戏源码-Pyorovania.zip

    scratch少儿编程逻辑思维游戏源码-Pyorovania.zip

    scratch少儿编程逻辑思维游戏源码-弹力猫.zip

    scratch少儿编程逻辑思维游戏源码-弹力猫.zip

    scratch少儿编程逻辑思维游戏源码-地心引力.zip

    scratch少儿编程逻辑思维游戏源码-地心引力.zip

    基于金枪鱼群优化算法的SVM在多变量时间序列预测中的MATLAB实现及优化

    内容概要:本文介绍了一种基于金枪鱼群优化算法(TSO)和支持向量机(SVM)的混合算法模型——TSO-SVM,在多变量时间序列预测中的应用。文中详细解释了TSO-SVM的工作原理,即通过模拟金枪鱼群觅食行为来优化SVM的参数,从而提升预测性能。同时提供了具体的Matlab代码实现步骤,包括参数初始化、模型训练和预测。实验结果显示,TSO-SVM相较于传统SVM方法,显著提升了预测的准确性和稳定性,并展示了良好的泛化能力。 适合人群:对机器学习尤其是时间序列预测感兴趣的科研人员和技术开发者。 使用场景及目标:①需要进行多变量时间序列预测的研究项目;②希望利用自然启发式优化算法改善现有SVM模型效果的技术团队。 其他说明:推荐使用Libsvm工具箱配合Matlab 2018B及以上版本,仅限于Windows 64位操作系统。

    机器视觉技术:OpenCV与Qt在工业相机采集及图像处理中的应用

    内容概要:本文深入探讨了机器视觉技术,重点介绍了OpenCV和Qt在工业相机采集及图像处理中的应用。文中详细讲述了卡尺工具、找线、找圆、颜色检测、模板匹配及形状匹配等关键技术的具体实现方法,并特别强调了海康工业相机采集与基于形状的模板匹配界面的开发。此外,形状匹配算法已被封装成DLL,方便直接调用。通过实际案例和技术解析,帮助读者全面掌握机器视觉系统的构建。 适合人群:对机器视觉感兴趣的初学者、有一定编程基础的研发人员、从事工业自动化领域的工程师。 使用场景及目标:适用于希望深入了解机器视觉技术及其应用场景的专业人士,旨在提升图像处理能力,优化工业自动化流程,提高生产效率。 其他说明:文章不仅提供理论知识,还附有示例代码,便于读者动手实践并加深理解。

    scratch少儿编程逻辑思维游戏源码-Billy奇妙之旅.zip

    scratch少儿编程逻辑思维游戏源码-Billy奇妙之旅.zip

    电动汽车BMS电池管理系统应用层软件模型:MBD方法、通信协议及AUTOSAR构建

    内容概要:本文详细介绍了基于模型开发(MBD)的BMS电池管理系统应用层软件模型。首先概述了BMS的核心任务,即确保电池的安全与高效运行,涉及充电、放电控制、实时监测和电池均衡管理。接着重点讨论了SUMlink电池管理系统策略模型,该模型通过收集和处理电池的数据(如电压、电流、温度),并运用多种算法(如SOC估算、SOH评估)来优化电池性能。文中还阐述了BMC CVS内部通讯协议DBC的作用,确保各模块间数据传输的准确性与效率。最后,介绍了AUTOSAR标准在BMS系统中的应用,特别是针对MPC5644A芯片的底层Build工程,提高了系统的可维护性、可扩展性和可靠性。此外,提到了INCA A2L标定文件的应用,用于配置和调整系统参数,以满足不同需求。 适合人群:从事电动汽车电池管理系统研究与开发的技术人员,尤其是对MBD方法、通信协议和AUTOSAR标准感兴趣的工程师。 使用场景及目标:适用于希望深入了解BMS系统的设计原理和技术细节的专业人士,旨在提高他们对该领域的理解和实际操作能力。 其他说明:通过对代码的具体分析,读者能够更加直观地理解BMS的工作流程及其各个组件间的协作关系。

    少儿编程scratch项目源代码文件案例素材-深海困境.zip

    少儿编程scratch项目源代码文件案例素材-深海困境.zip

    少儿编程scratch项目源代码文件案例素材-去吧泡泡糖.zip

    少儿编程scratch项目源代码文件案例素材-去吧泡泡糖.zip

    KEPServerEX6-6.17.269.0

    KEPServerEX6-6.17.269.0,最新版

    scratch少儿编程逻辑思维游戏源码-第二个循环.zip

    scratch少儿编程逻辑思维游戏源码-第二个循环.zip

    少儿编程scratch项目源代码文件案例素材-手里剑.zip

    少儿编程scratch项目源代码文件案例素材-手里剑.zip

    少儿编程scratch项目源代码文件案例素材-山地跳跃.zip

    少儿编程scratch项目源代码文件案例素材-山地跳跃.zip

    机器人路径规划中Informed RRT*算法详解与代码实现

    内容概要:本文详细介绍了Informed RRT*算法及其在机器人路径规划领域的应用。文章首先解释了该算法相较于传统RRT*算法的优势,即通过将采样范围限制在由起点和终点构成的椭圆区域内来提高搜索效率。接着,文中提供了具体的代码实现,包括椭圆采样的核心公式、路径优化的rewire步骤以及动态调整邻居半径的方法。此外,还讨论了路径队列管理和椭圆区域随路径优化动态更新的重要性。通过这些技术手段,Informed RRT*能够在找到初始路径后显著加快优化速度。 适合人群:对机器人路径规划感兴趣的科研人员、工程师及学生。 使用场景及目标:适用于需要高效路径规划的实际应用场景,如自动驾驶汽车、无人机飞行路径规划等。目标是在复杂环境中快速找到从起点到终点的最佳路径。 其他说明:建议读者在理解理论的基础上,结合提供的代码进行实验,以便更好地掌握算法的工作机制。同时,在不同环境条件下测试算法性能,观察其自适应能力。

    基于COMSOL有限元仿真的变压器辐射传热数值分析:从入门到进阶

    内容概要:本文详细介绍了基于COMSOL有限元软件的变压器辐射传热数值分析方法。首先,解释了变压器内外辐射传热的基本机理,包括热量通过传导、对流和辐射的方式传递,重点在于辐射传热的作用及其数学描述。接着,逐步引导读者从零开始构建有限元仿真模型,涵盖模型参数确定、网格划分、材料属性定义、边界条件设置、传热方程设定、仿真运行及结果分析等多个步骤。最后,探讨了进一步研究的方向,如不同因素(温度、材料属性、几何形状)对辐射传热的影响,以及该模型在电力电子设备和热管理系统的潜在应用。 适合人群:电气工程专业学生、初学者和技术爱好者,尤其是对有限元仿真和变压器辐射传热感兴趣的群体。 使用场景及目标:适用于希望通过实际操作掌握有限元仿真技能的人群,旨在帮助他们理解变压器辐射传热机制并能独立完成相关仿真项目。 其他说明:本文不仅提供了理论知识,还附带了详细的视频教程和仿真模型,使学习过程更加直观易懂。

    scratch少儿编程逻辑思维游戏源码-Scratch 奔跑.zip

    scratch少儿编程逻辑思维游戏源码-Scratch 奔跑.zip

    scratch少儿编程逻辑思维游戏源码-超级马里奥兄 回放引擎.zip

    scratch少儿编程逻辑思维游戏源码-超级马里奥兄 回放引擎.zip

    少儿编程scratch项目源代码文件案例素材-你准备好了吗?.zip

    少儿编程scratch项目源代码文件案例素材-你准备好了吗?.zip

    少儿编程scratch项目源代码文件案例素材-潜水艇.zip

    少儿编程scratch项目源代码文件案例素材-潜水艇.zip

Global site tag (gtag.js) - Google Analytics