`
maidingding
  • 浏览: 13462 次
  • 性别: 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

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

    电力系统中基于MATLAB的价格型需求响应与电价弹性矩阵优化

    内容概要:本文详细介绍了如何利用MATLAB进行价格型需求响应的研究,特别是电价弹性矩阵的构建与优化。文章首先解释了电价弹性矩阵的概念及其重要性,接着展示了如何通过MATLAB代码实现弹性矩阵的初始化、负荷变化量的计算以及优化方法。文中还讨论了如何通过非线性约束和目标函数最小化峰谷差,确保用户用电舒适度的同时实现负荷的有效调节。此外,文章提供了具体的代码实例,包括原始负荷曲线与优化后负荷曲线的对比图,以及基于历史数据的参数优化方法。 适合人群:从事电力系统优化、能源管理及相关领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解并掌握价格型需求响应机制的专业人士,旨在帮助他们更好地理解和应用电价弹性矩阵,优化电力系统的负荷分布,提高能源利用效率。 其他说明:文章强调了实际应用中的注意事项,如弹性矩阵的动态校准和用户价格敏感度的滞后效应,提供了实用的技术细节和实践经验。

    一级医院医疗信息管理系统安装调试技术服务合同20240801.pdf

    一级医院医疗信息管理系统安装调试技术服务合同20240801.pdf

    表5 文献综述.doc

    表5 文献综述.doc

    36W低压输入正激电源, 正激变压器设计方法步骤及谐振电感的设计方法,主要讲诉了正激电源变压器测的输入输出参数,按输入的条件设计相关的变压器的参数,同时将输出电感的设计方法一并例出,详细的设计步骤

    36W低压输入正激电源 变压器电感设计

    基于YOLOv8的深度学习课堂行为检测系统源码(含检测图片和视频)

    基于YOLOv8的深度学习课堂行为检测系统源码,软件开发环境python3.9,系统界面开发pyqt5。在使用前安装python3.9,并安装软件所需的依赖库,直接运行MainProgram.py文件即可打开程序。模型训练时,将train,val数据集的绝对路径改为自己项目数据集的绝对路径,运行train.py文件即可开始进行模型训练,内含项目文件说明,以及检测图片和视频。

    odbc-oracle zabbix模版原版

    odbc_oracle zabbix模版原版

    基于纳什谈判理论的风光氢多主体能源系统合作运行方法——综合能源交易与优化模型

    内容概要:本文探讨了利用纳什谈判理论来优化风光氢多主体能源系统的合作运行方法。通过MATLAB代码实现了一个复杂的优化模型,解决了风电、光伏和氢能之间的合作问题。文中详细介绍了ADMM(交替方向乘子法)框架的应用,包括联盟效益最大化和收益分配谈判两个子任务。此外,还涉及了加权残差计算、目标函数构造、可视化工具以及多种博弈模式的对比等功能模块。实验结果显示,合作模式下系统总成本显著降低,氢能利用率大幅提升。 适合人群:从事能源系统研究的专业人士、对博弈论及其应用感兴趣的学者和技术人员。 使用场景及目标:适用于需要优化多主体能源系统合作运行的场合,如工业园区、电网公司等。主要目标是提高能源利用效率,降低成本,增强系统的灵活性和稳定性。 其他说明:代码中包含了丰富的可视化工具,能够帮助研究人员更好地理解和展示谈判过程及结果。同时,提供了多种博弈模式的对比功能,便于进行性能评估和方案选择。

    C#与Halcon联合编程实现高效视觉几何定位与测量框架

    内容概要:本文详细介绍了如何利用C#与Halcon联合编程构建高效的视觉几何定位与测量框架。主要内容涵盖模板创建与匹配、圆测量、数据持久化以及图像采集等方面的技术细节。首先,通过创建形状模板并进行匹配,实现了工件的精确定位。接着,针对圆形物体的测量,提出了动态ROI绘制、亚像素边缘提取和稳健圆拟合的方法。此外,还讨论了模板管理和图像采集的最佳实践,确保系统的稳定性和高效性。最后,强调了Halcon对象的内存管理和错误处理机制,提供了实用的优化建议。 适合人群:具备一定编程基础,尤其是对C#和Halcon有一定了解的研发人员和技术爱好者。 使用场景及目标:适用于工业生产线上的自动化检测设备开发,旨在提高工件定位和尺寸测量的精度与效率。主要目标是帮助开发者掌握C#与Halcon联合编程的具体实现方法,从而构建稳定可靠的视觉检测系统。 其他说明:文中提供了大量实战代码片段和调试技巧,有助于读者快速理解和应用相关技术。同时,作者分享了许多实际项目中的经验和教训,使读者能够避开常见陷阱,提升开发效率。

    QT6 C++视频播放器实现(基于QGraphicsVideo)

    QT视频播放器实现(基于QGraphicsView)

    评估管线钢环焊缝质量及其对氢脆的敏感性.pptx

    评估管线钢环焊缝质量及其对氢脆的敏感性.pptx

    机器学习(预测模型):专注于 2024 年出现的漏洞(CVE)信息数据集

    该是一个在 Kaggle 上发布的数据集,专注于 2024 年出现的漏洞(CVE)信息。以下是关于该数据集的详细介绍:该数据集收集了 2024 年记录在案的各类漏洞信息,涵盖了漏洞的利用方式(Exploits)、通用漏洞评分系统(CVSS)评分以及受影响的操作系统(OS)。通过整合这些信息,研究人员和安全专家可以全面了解每个漏洞的潜在威胁、影响范围以及可能的攻击途径。数据主要来源于权威的漏洞信息平台,如美国国家漏洞数据库(NVD)等。这些数据经过整理和筛选后被纳入数据集,确保了信息的准确性和可靠性。数据集特点:全面性:涵盖了多种操作系统(如 Windows、Linux、Android 等)的漏洞信息,反映了不同平台的安全状况。实用性:CVSS 评分提供了漏洞严重程度的量化指标,帮助用户快速评估漏洞的优先级。同时,漏洞利用信息(Exploits)为安全研究人员提供了攻击者可能的攻击手段,有助于提前制定防御策略。时效性:专注于 2024 年的漏洞数据,反映了当前网络安全领域面临的新挑战和新趋势。该数据集可用于多种研究和实践场景: 安全研究:研究人员可以利用该数据集分析漏洞的分布规律、攻击趋势以及不同操作系统之间的安全差异,为网络安全防护提供理论支持。 机器学习与数据分析:数据集中的结构化信息适合用于机器学习模型的训练,例如预测漏洞的 CVSS 评分、识别潜在的高危漏洞等。 企业安全评估:企业安全团队可以参考该数据集中的漏洞信息,结合自身系统的实际情况,进行安全评估和漏洞修复计划的制定。

    QML Combobox 自动过滤,输入字符串后自动匹配

    博客主页:https://blog.csdn.net/luoyayun361 QML ComboBox控件,输入关键字后自动过滤包含关键字的列表,方便快速查找列表项

    【人工智能领域】人工智能技术发展历程、核心原理及应用指南:涵盖机器学习、深度学习、NLP和计算机视觉的全面介绍

    内容概要:本文全面介绍了人工智能技术的发展历程、核心技术原理、应用方法及其未来趋势。首先阐述了人工智能的定义和核心目标,随后按时间顺序回顾了其从萌芽到爆发的五个发展阶段。接着详细讲解了机器学习、深度学习、自然语言处理和计算机视觉等核心技术原理,并介绍了使用现成AI服务和开发自定义AI模型的应用方法。此外,还展示了智能客服系统、图像分类应用和智能推荐系统的具体实现案例。针对普通用户,提供了使用大模型的指南和提问技巧,强调了隐私保护、信息验证等注意事项。最后展望了多模态AI、可解释AI等未来发展方向,并推荐了相关学习资源。; 适合人群:对人工智能感兴趣的初学者、技术人员以及希望了解AI技术应用的普通大众。; 使用场景及目标:①帮助初学者快速了解AI的基本概念和发展脉络;②为技术人员提供核心技术原理和应用方法的参考;③指导普通用户如何有效地使用大模型进行日常查询和任务处理。; 其他说明:本文不仅涵盖了AI技术的基础知识,还提供了丰富的实际应用案例和实用技巧,旨在帮助读者全面理解人工智能技术,并能在实际工作中加以应用。同时提醒读者关注AI伦理和版权问题,确保安全合法地使用AI工具。

    本学习由 Matrix 工作室制作并开发,包括算法与数据结构的学习路线和各种题解

    本学习由 Matrix 工作室制作并开发,包括算法与数据结构的学习路线和各种题解。

    基于智慧图书馆基础业务流程Axure11高保真原型设计

    本项目致力于构建基于微服务架构的智慧图书馆管理平台,重点突破多校区图书馆异构系统间的数据壁垒。通过建立统一数据治理规范、部署智能分析模块、重构业务流程引擎,系统性实现以下建设目标:构建跨馆业务数据的标准化整合通道,实施容器化部署的弹性资源管理体系,开发具备机器学习能力的业务辅助决策系统,打造可量化评估的管理效能提升模型,最终形成支持PB级数据处理的分布式存储体系与全维度数据资产图谱。

    mysql中慢sql分析

    根据processlist查询出慢sql 1.修改配置文件中的mysql链接 2.目前是15秒执行一次获取执行时间在5秒上的sql,可以在配置中修改 3.执行后查出的慢sql会记录到log文件夹中以日期命名的txt文件中,可自行查验

    全域通航 低空经济服务平台建设实施方案.pptx

    全域通航 低空经济服务平台建设实施方案.pptx

    全国联合交通查询手册,涵盖各大城市

    全国交通一卡通互联互通服务手册,支持在线查询

    电力电子中移相全桥DC-DC变换器的Simulink离散化建模与优化

    内容概要:本文详细介绍了如何在Simulink中进行移相全桥DC-DC变换器的离散化建模及其优化。主要内容包括搭建主电路、PWM波形生成、数字PI调节器的设计以及针对负载突变情况下的闭环控制优化。文中特别强调了移相控制、死区时间设置、采样周期选择、积分限幅、前馈补偿等关键技术点的应用,确保在极端负载条件下(如从3kW突变为3.6W)输出电压仍能保持稳定。此外,作者还分享了许多实践经验,如避免非线性磁化曲线带来的数值振荡、合理设置仿真步长等。 适合人群:从事电力电子研究或开发的技术人员,尤其是对移相全桥变换器感兴趣的研究者和技术爱好者。 使用场景及目标:适用于需要深入了解移相全桥DC-DC变换器工作原理及其在Simulink环境下的离散化建模和优化的人群。目标是掌握如何通过合理的参数设定和算法改进,使系统能够在复杂工况下保持良好的性能。 其他说明:文中提供了大量具体的Matlab/Simulink代码片段,帮助读者更好地理解和实践相关概念。同时,作者也指出了许多常见的陷阱和注意事项,有助于初学者少走弯路。

Global site tag (gtag.js) - Google Analytics