使用Java怎么实现一个多线程断点下载?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Java多线程断点下载原理如图:
import java.io.BufferedReader;,
import java.io.File,
import java.io.FileInputStream,
import java.io.InputStream,
import java.io.InputStreamReader,
import java.io.RandomAccessFile,
import java.net.HttpURLConnection,
import java.net.URL,
,
{public class  MutileThreadDownload /* *,才能
,,*,线程的数量,
,,*/,
private 才能static int  threadCount =, 3,,
,/* *,才能
,,*,每个下载区块的大小,
,,*/,
private 才能static long  blocksize;,
,/* *,才能
,,*,正在运行的线程的数量,
,,*/,
private 才能static int  runningThreadCount;,
,/* *,才能
,,*,@param args
,,*,@throws Exception
,,*/,
public 才能;static  void main (String [], args), throws Exception {,
,,,//,服务器文件的路径,
,,,String path =,“http://192.168.1.100:8080 ff.exe",,
,,,URL URL =, new URL(路径),,
,,,HttpURLConnection conn =, (HttpURLConnection), url.openConnection (),,
,,,conn.setRequestMethod (“GET");,
,,,conn.setConnectTimeout (5000),,
,,,int code =, conn.getResponseCode (),,
,,,if (code ==, 200), {,
,,,,,long size =, conn.getContentLength();//,得到服务端返回的文件的大小,
,,,,,System.out.println(“服务器文件的大小:“,+,大小),,
,,,,,blocksize =, size /, threadCount;,
,,,,,//,1。首先在本地创建一个大小跟服务器一模一样的空白文件只
,,,,,File File =, new 文件(“temp.exe");,
,,,,,RandomAccessFile raf =, new RandomAccessFile(文件,,“rw"),,
,,,,,raf.setLength(大小),,
,,,,,//,2。开启若干个子线程分别去下载对应的资源又是;
,,,,,runningThreadCount =, threadCount;,
,,,,,for (int 小姐:=,1;,小姐:& lt;=, threadCount;,我+ +),{,
,,,,,,,long startIndex =,(小姐,安康;1),*,blocksize;,
,,,,,,,long endIndex =,小姐:*,blocksize 作用;1;,
,,,,,,,if (小姐:==,threadCount), {,
,,,,,,,,,//,最后一个线程,
,,,,,,,,,endIndex =, size 作用;1;,
,,,,,,,},
,,,,,,,System.out.println(“开启线程:“,+,小姐:+,“下载的位置:“,+,startIndex +,“~”,
,,,,,,,,,,,+,endIndex),,
,,,,,,,new DownloadThread(路径,,我,,startIndex,, endIndex) .start (),,
,,,,,},
,,,},
,,,conn.disconnect (),,
,,},
,
private 才能static class  DownloadThread extends Thread {,
,,,private int threadId;,
,,,private long startIndex;,
,,,private long endIndex;,
,,,private String 路径;,
,
,,,public DownloadThread (String 路径,int threadId,, long startIndex,,
,,,,,,,long endIndex), {,
,,,,,this.path =,路径;,
,,,,,this.threadId =, threadId;,
,,,,,this.startIndex =, startIndex;,
,,,,,this.endIndex =, endIndex;,
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null