用Java设计下载软件-Java基础-Java-编程开发

JAVA高端编程研发培训班 JAVA开发视频教程 JAVA高端编程研发培训班 JAVA开发视频教程 Java高级开发工程师是做什么的? 初级开发工程师 Java 程序设计基础,包括 J2sdk基础、Java面向对象基础、Java API使用、数据结构及算法基础、Java AWT图形界面程序开发;J2SE平台Java程序设计,包括Swing图形程序设计, Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,流和文件,多线... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

本文介绍了如何使用Java编写下载软件并实现多现程下载

“网络蚂蚁”、Falshget等许多多线程下载软件都是网友的必备工具,利用这些工具可以快速从服务器上下载比较大的文件,这些工具的工作特性是把服务器端的文件分成几个段,每个段分别、同时进行下载。编写这类程序,第一、必须对HTTP协议有较为充分的了解;第二、有效使用多线程编程手段在软件上实现。

HTTP协议的简介

HTTP协议是一种超文本传输协议(HypertextTransferProtocol),工作于网络应用层,自1990年起广泛应用于WWW的全球信息服务,HTTP协议的详细说明可以在网上查阅RFC2518、RFC2616等文档。

HTTP协议老的标准是HTTP/1.0,目前最通用的标准是HTTP/1.1。HTTP/1.1是在HTTP/1.0基础上的升级,增加了一些功能,全面兼容HTTP/1.0。HTTP/1.0不支持文件断点续传,如果服务器使用HTTP/1.0,“网络蚂蚁”的任何多线程下载程序都只能按单线程下载;好在目前的Web服务器绝大多数都采用了HTTP/1.1,所以,下面将基于HTTP/1.1进行介绍。

HTTP协议的相关重要命令

基于HTTP的浏览器浏览网页、下载文件时,工作原理类似客户机/服务器模式:浏览器向Web服务器发出一个HTTP请求行;Web服务器在收到有效的请求后,返回一个状态行或多个响应标题、一个空白行和相关文档。根据这一工作原理,下载程序必须实现向服务器发送请求和获取服务器响应状态的功能。

1.向服务器发送GET请求命令

一个HTTP请求由一个请求行、可选数目的请求标题、一个空白行,以及在POST情况下的一些额外的数据组成。请求行的格式是:

请求方法URIHTTP/版本号

GET命令是浏览器常用的文档请求方法,在程序中间使用

GETURIHTTP/1.1

向Web服务器发送请求行(行号3),Java代码如下:

....

clientSocket=newSocket(host,port);//打开要下载文件服务器的Socket

outStream=newPrintStream(clientSocket.getOutputStream());

....

outStream.println(“GET” uri “HTTP/1.1”);

outStream.println(“Host:” host);

outStream.println(“Accept:*/*”);

outStream.println(“Referer:”);

outStream.println();

....

注:第4行给出URL中的主机名和端口号,第5行说明客户端接收所有MIME类型,第7行方送一个空白行,表明请求行结束。

2.获取服务器响应状态

在发送HTTP请求行以后,程序就可以读取服务器的响应状态了。HTTP响应状态行包括:HTTP状态码和一些HTTP响应标题。

1)HTTP状态码

HTTP状态码格式是HTTP/版本信息的数字表示。状态码例子如下:

HTTP/1.0200OK//表示服务器支持HTTP/1.0协议,成功

HTTP/1.1200OK//表示服务器支持HTTP/1.1协议,成功

HTTP/1.0404NotFound//表示服务器支持HTTP/1.0协议,访问文件没有找到

在程序中间,如果读到“HTTP/1.1200OK”这样的字符串,表明欲下载文件存在、该服务器支持断点续传,可以使用多线程下载。如果读到“HTTP/1.0200OK”这样的字符串,表明欲下载文件存在、但该服务器不支持断点续传,只可以使用单线程下载。

.....

while((line=inStream.readLine())!=null)//将服务器响应状态读到line

........

if(line.substring(0,7).equals(“HTTP/1.”))//判断是否支持HTTP/1.1

{if(line.charAt(7)==‘0’)

{

System.out.println(“serverusehttp/1.0”);

threadcount=1;

}

if(!(line.substring(9,12)).equals(“200”))//判断请求是否成功

{System.out.println(“ERROR:” line);

returnfalse;

}

}

2)读取重要的响应标题,获得要下载文档的文件长度

如果HTTP状态码表明访问成功,服务器会回送一些标题行,我们最关注的是Content-Length这一行,比如,如果服务器回送“Content-Length:1000”,表明请求文件的长度是1000字节,所以读取这一行信息,可以得到文件的长度信息:

....

if(line.substring(0,15).equals(“Content-Length:”))

{filelength=Long.parseLong(line.substring(15).trim());

System.out.println(“filelength:” filelength);

}

......

向服务器发送断点续传请求

如上所述,如果服务器支持HTTP/1.1,再次向服务器发送GET请求:

.....

outStream.println(“GET” uri “HTTP/1.1”);

outStream.println(“Host:” host);

outStream.println(“Accept:*/*”);

outStream.println(“RANGE:bytes=” (fileblocklength)*thisthreadid “-”);

outStream.println();

.....

第4行是关键,“RANGE:bytes=”是HTTP/1.1新增内容,HTTP/1.0每次传送文件都是从文件头开始,即0字节处开始,“RANGE:bytes=XXXX”表示要求服务器从文件XXXX字节处开始传送,这就是我们平时所说的断点续传!

分割文件,多线程下载

使用多线程编程技术,同时启动多个线程,根据线程个数,计算文件分割位置,向服务器发送几个不同的下载断点,同时接受数据并写入文件,就可以实现多线程下载了。

.....

raf=newRandomAccessFile(file,“rw”);//以随机存取方式打开文件

.....

synchronized(raf)//按同步方式把各个线程得到数据分别写入文件

{raf.seek(thisthreadid*(filelength/threadcount) k*buflength);

raf.write(readbytes);

......

}

Java开发手机App教程,学完必掌握 JDK提供了编译和运行Java代码所需的工具,而IDE则提供了开发App所需的各种功能和工具。本教程将带你逐步学习如何使用Java语言开发手机App,无论你是初学者还是有一定经验的开发者,都能从中受益。无论你是想成为一名职业开发者,还是仅仅对手机App开发感兴趣,这个教程都将为你打下坚实的基础。最后,我们会指导你如何测试和调试你的App,并将其发布到Google Play商店或其他应用商店。在学习过程中,你将遇到许多常见的开发任务,如处理数据存储、使用传感器、处理图像和音频等。 阅读详情

相关推荐

国家二级Java编程模拟实践软件

Java语言自1995年诞生以来,已经成为了广泛使用的编程语言之一。它的出现,源于Sun Microsystems公司的工程师团队为消费类电子产品的嵌入式系统设计一种小型、安全、面向对象的程序设计语言的构想。随后,Java演变成一种通用的、具有跨平台能力的高级编程语言,其核心理念是“一次编写,到处运行”。Java语言的主要特点包括:面向对象:Java是一种纯粹的面向对象语言,一切皆为对象。跨平台性。

weixin_33480380的博客 1010

用Java设计下载软件

本文介绍了如何使用Java编写下载软件并实现多现程下载“网络蚂蚁”、Falshget等许多多线程下载软件都是网友的必备工具,利用这些工具可以快速从服务器上下载比较大的文件,这些工具的工作特性是把服务器端的文件分成几个段,每个段分别、同时进行下载。编写这类程序,第一、必须对HTTP协议有较为充分的了解;第二、有效使用多线程编程手段在软件上实现。HTTP协议的简介HTTP协议是一种超文本传

溺水的鱼 - Later equals never. 884

Zemax实战:手把手教你设计一个40倍、NA0.65的显微物镜(附初始结构文件)

本文详细介绍了使用Zemax设计40倍、NA0.65显微物镜的完整流程,从初始结构搭建到优化验证,涵盖光学设计的关键技巧和实战经验。通过分阶段优化策略和公差分析,帮助工程师快速掌握高倍显微物镜的设计方法,提升光学系统性能。

weixin_42525369的博客 344

用JAVA写一个下载器第1集

下载一个APK的文件。等待程序运行结束,需要几分钟,耐心等待,之后会在D:\Java_dm\TestDownloaderPath的文件夹中找到tim_3.5.1.3168_537150355_64.apk文件。在控制台中输入要下载文件的地址,例如:https://downv6.qq.com/qqweb/QQ_1/android_apk/tim_3.5.1.3168_537150355_64.apk。文章中已经提供全部代码,如果需要源码的可以在下方留言或者私信。Main是主类,主函数在其中。

weixin_45345143的博客 966

手把手教 - VSCode 开发 GD32F450 单片机

系统版本:rt-thread v5.2.2单片机型号:GD32F450ZK基于文章进行开发。

weixin_46158019的博客 841

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 481

【附源码】Java计算机毕业设计安卓校园辅助软件-新生小助手APP(程序+LW+部署)

本章将会介绍校园辅助软件-新生小助手APP的功能模块。系统一共有两个用户,分别是管理员和学生。

wek106的博客 300

告别玄学调参:手把手教你用20元件模型搞定GaN HEMT高频仿真(附S参数提取避坑指南)

本文详细介绍了如何使用20元件模型优化GaN HEMT高频仿真,解决传统16元件模型在10GHz以上频段的误差问题。通过S参数提取避坑指南和实战案例,帮助工程师精准建模分布式电极效应和寄生反馈路径,提升射频电路设计效率。

weixin_42523693的博客 441

Java后端开发:推荐常用的13款开发工具(非常详细)零基础入门到精通,收藏这一篇就够了

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。(都打包成一块的了,不能一一展开,总共300多集)

Python_0011的博客 1万+

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 352

Gröbner基方法入门第I部分:项序和约化

Gröbner基方法入门第I部分:项序和约化 理想的准素分解与矩阵分解是计算代数的核心问题,它们在计算机代数、计算代数几何、代数编码和密码学、多维系统理论等学科都有非常重要的理论意义与应用价值.Gröbner基理论是研究理想的准素分解与矩阵素分解的重要工具之一.更简单地概括:Gröbner基方法是从任意一个多项式理想的一组给定生成元,计算另一组性质良好的生成元,并称为该理想的Gröbner基.它能用来判定任意多项式是否属于该理想. Gröbner基的代数算法是Buchberger在1960年代开发的,并

MinCong Luo的博客 4265

java学习路线及资源下载,持续整理中

java学习路线及资源下载,持续整理中学习路线图:http://blog.youkuaiyun.com/shenzhq1980/article/details/484703371、java学习经典书籍_基础编程篇下载地址:http://blog.youkuaiyun.com/shenzhq1980/article/details/48375543书籍:Java程序设计语言.(美国)阿诺德.清晰版JA...

weixin_34329187的博客 82

光学测量仿真软件:Zygo_(12).Zygo软件的用户界面与操作指南

Zygo软件支持用户自定义工具和插件,以扩展软件的功能和适应特定的仿真需求。编写脚本使用Python或其他支持的脚本语言编写自定义工具的脚本。例如,编写一个脚本来计算光束的衍射效率。# 示例脚本:计算光束的衍射效率 import zygo # 导入Zygo软件的API def calculate_diffraction_efficiency(wavelength , grating_period , angle) : """计算光束的衍射效率:param wavelength: 光源波长(单位:米)

kkchenjj的博客 1669

JAVA程序员常用软件整理下载

********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.baidu.com/s/1jGFYvAYMyclipse8.5破解版:http://pan.baidu.com/s/1sjz5cNr Myclipse10:http://pan.baidu.com/s/...

weixin_33946020的博客 215

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

北理工《Java程序设计》课程教学资源索引(2013版)——第8、9讲发布

北理工《Java程序设计》 课程教学资源索引(2013版) 说明: “Java程序设计”是北京理工大学计算机学院开设的选修课程,主讲教师是金旭亮。 本教学资源主要包括上课所使用之PPT(己转为PDF格式)和范例源码,以RAR格式打包上传至优快云下载频道(请点击每讲标题下载)。 2013版的课件是我经重新调整并设计的,大大增强了编程技能训练的内容,同时在内容安排上更加注重循序渐进。 这些课件在设计...

844604778 277

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【免费下载】 Java程序设计基础 第3版 PDF 下载

Java程序设计基础 第3版 PDF 下载 【下载地址】Java程序设计基础第3版PDF下载分享 Java程序设计基础 第3版 PDF 下载本仓库提供《Java程序设计基础 第3版》PDF版本的下载资源 项目地址: https:/...

gitblog_06586的博客 6118

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java编程必用软件(有下载路径)

链接:https://pan.baidu.com/s/1-wywkL1VuV8oBnxhdw_gSQ 提取码:f2ti

XING_Gou的博客 838

手机版python编程软件下载,手机python编程软件

python是一款面向对象、解释型、动态数据类型的高级编程设计语言。它拥有语言上的简洁性、可读性和易维护性,在图形处理、数学处理、文本处理、系统编程、数据库编程等领域都被广泛应用。所需工具:安装教程1、下载好安装包,双击运行“python-3.6.2-amd64.exe”程序,弹出软件安装向导,点击“Install Now”开始安装;2、等待设置进度完成,文件解压缩,请稍等片刻。3、设置成功,点击“close”关闭python自动安装界面;python 64位安装报错。

aifans_bert的博客 4365

Java编程基础教程

Java编程基础教程

Zff121017的博客 1786

JAVA软件下载过程分析

关于JAVA软件下载过程分析在探讨Java软件的下载过程时,我们首先需要理解Java作为一种广泛使用的编程语言及其运行环境(Java Runtime Environment, JRE)或开发环境(Java Development Kit, JDK)在软件开发和部署中的核心地位。Java软件的下载过程涉及多个步骤,从用户触发下载请求到软件成功安装并运行,每一步都至关重要。以下是对Java软件下载过程的一个详细分析。

weixin_67344863的博客 1064

C++学习之打车软件—java基础编程

C++学习之打车软件—java基础编程

qq_27302885的博客 1421

【免费下载】 探索Java并发编程的奥秘:《JAVA并发编程艺术》高清PDF下载

探索Java并发编程的奥秘:《JAVA并发编程艺术》高清PDF下载 【下载地址】JAVA并发编程艺术高清PDF下载 本仓库提供了一份名为《JAVA并发编程艺术》的高清PDF文件下载。该资源详细介绍了Java并发编程的各个方面,涵盖了从基础概念到高级技术的全面内容 ...

gitblog_06678的博客 1177

java编程常用软件

有大神曾说“给我一个记事本,我还你一个项目”,作为小白的我,以前也对这句话深信不疑,但当我参加人生第一次编程考试的时候,我发现我用记事本码代码的速度实在是太慢了,一样的代码,别人用eclipse IDE编写用了5分钟,而我至少半小时。虽然有点强行甩锅IDE的嫌疑,但有款好的编程软件,就会让你打代码速度更快,让你的头发掉的更少…… 废话讲完了,以下是我推荐的几款编程常用软件: 1、IntelliJ IDEA --当然是码java代码的软件啦 IntelliJ IDEA是java编程语言开发的集成环境。Inte

m0_67401499的博客 1万+

你知道用手机也能写软件吗?手机编程开发

手机编程开发 除了我们常见的php,java,c,前后端等等等用电脑来编写程序的,还有可以用手机编写软件的 用手机来开发软件 既然是在手机上开发编写软件那么肯定也少不了工具,这篇文章就给大家分享几个手机编程开发的工具 1. iApp iApp是一款手机端开发工具,在你任何空余时间,打开iApp应用即可动手设计你的应用程序!iApp采用了可视化设计界面,让你设计应用界面的时候一目了然,不用繁琐的看着代码伤脑筋了!iApp是一款让你的手机展现放光彩的应用。轻松的操作就可以设计出,你想要的应用界面iApp不是一

qq_46927228的博客 1万+

Java基础之Java网络编程详解

网络编程是现代软件开发中不可或缺的一部分,它通过网络实现了计算机之间的通信,使得信息交换和数据共享成为可能。在网络通信的实现过程中,语言的选择和工具的使用至关重要,而Java提供了强大的支持,使得开发者可以更便捷地构建网络应用程序。网络通信的核心是数据的发送与接收,而Java的网络编程模型为此提供了一套易用且高效的工具。无论是点对点的通信,还是基于更复杂协议的多节点交互,Java都能满足需求。在网络编程中,基础的通信模式是基于Socket的点对点连接,它可以实现客户端和服务器之间的直接通信。

道可道非常道 2067
上一篇: 触摸Java编程中的“文档”和“包”-Java基础-Java-编程开发
下一篇: 利用Java Swing 实现游戏开发-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值