多线程下载的例子,测试OK
package download;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.io.ObjectInputStream.GetField;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class MluThreadDownTest{
public static void main(String args[]){
final int DOWN_THREAD_NUM=4;
final String OUT_FILE_NAME ="a.rar";
InputStream[] isArr= new InputStream[DOWN_THREAD_NUM];
RandomAccessFile[] outArr= new RandomAccessFile[DOWN_THREAD_NUM];
try {
//URL url=new URL("http://gdwt.newhua.com/down/setup_newhua.zip");
URL url=new URL("http://zzidc.onlinedown.net/down/warhly.rar");
isArr[0] =url.openStream();
long fileLen=getFileLength(url);
System.out.println("网络资源的大小"+fileLen);
//已输出文件名创建第一个randomAccessFile输出流
outArr[0]= new RandomAccessFile(OUT_FILE_NAME,"rw");
//创建一个与下载资源大小相同的空文件
for(int i=0;i<fileLen;i++){
outArr[0].write(0);
}
//每线程应该下载的字节数
long numPerThread= fileLen/DOWN_THREAD_NUM;
//整个下载资源整除后剩下的余数
long left=fileLen%DOWN_THREAD_NUM;
for(int i=0;i<DOWN_THREAD_NUM;i++){
//为每个线程打开一个输入流,一个RandomAccessFile对象
//让每个线程分别下载网络资源的不同部分
if ( i!=0){
//以URL 打开多个输入流
isArr[i]=url.openStream();
//以指定输出文件创建多个RandomAccessFile对象
outArr[i] = new RandomAccessFile(OUT_FILE_NAME,"rw"); //rw,表示读写
}
//分别启动多个线程来下载网络资源
if(i==DOWN_THREAD_NUM-1){
//最后一个线程下载指定NUMpERtHREAD+LEFT个字节
new DownThread(i*numPerThread,(i+1)*numPerThread+left,isArr[i],outArr[i]).start();
}else{
new DownThread(i*numPerThread,(i+1)*numPerThread,isArr[i],outArr[i]).start();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static long getFileLength(URL url) throws Exception {
long length=0;
URLConnection con= url.openConnection();
long size= con.getContentLength();
length=size;
return length;
}
}
分享到:
相关推荐
`cURL`库提供了一种解决方案,通过`CURL_MULTI`接口支持多线程请求,大大提高了处理速度。本文将详细介绍如何使用PHP的`CURL_MULTI`实现多线程数据采集,并分析其在性能优化上的优势。 首先,我们来看一个简单的`...
在Android开发中,异步线程下载是一种常见的技术,它允许应用在后台执行大文件的下载操作,而不阻塞用户界面。...如果你在实际测试中确认它是OK的,那么这个例子可以作为你未来项目中异步下载功能的一个参考。
在多线程场景下,cURL的`curl_multi_init()`函数可以帮助我们初始化一个多会话处理器,这样就可以同时处理多个cURL句柄。 以下是一个简单的PHP多线程cURL抓取示例: ```php function Curl_http($array, $timeout)...
在Java编程语言中,UDP(User Datagram Protocol)是一种无连接的传输层协议,常用于需要高效传输但不保证数据完整...此外,可以添加多线程以实现并发发送和接收,或者添加错误检测和重传机制以提高数据传输的可靠性。
Python中的线程间通信是多线程编程中的一个重要概念,特别是在需要不同线程协同工作的场景下。本示例中,我们使用了`pypubsub`库来实现Python线程间的消息传递,这是一种发布/订阅(publish/subscribe)模式的通信...
总的来说,Android客户端与服务器的通讯涉及网络编程、数据解析、线程管理等多个方面,理解并熟练掌握这些技术对于开发Android应用至关重要。通过研究提供的代码示例,你可以更深入地了解这一过程,并将其应用到自己...
答:常见的ACCESS、SQLITE3都是单机数据库,不支持多线程,所以采用连接池无意义。连接池Ex,支持MSSQL数据库,可以正常使用。 ======================================================================= 7、使用...
通过使用goroutines(轻量级线程)和channels,我们可以在处理多个连接时实现并行性。例如,服务器可以为每个新的连接启动一个新的goroutine: ```go for { conn, err := server.Accept() if err != nil { ...
3. **多线程支持**:libcurl库提供了多线程支持,可以在同一程序中并发处理多个网络请求,提高应用程序的效率。 4. **文件上传下载**:libcurl库能够方便地实现文件的上传和下载,支持断点续传,对于大文件传输非常...
3. **线程安全**:服务器支持多线程处理请求,确保并发访问时的稳定性。 4. **自定义响应**:你可以根据需求编写处理函数,生成自定义的HTTP响应,如返回HTML、JSON或者其他数据格式。 在Android中使用NanoHttpd,...
此外,源代码中可能还包括了对并发安全的处理,因为Go的字典不是线程安全的,所以在多 goroutine 环境下,需要额外的同步机制,如互斥锁(`sync.Mutex`)来保证数据一致性。 总之,"去字典的例子"这个主题涵盖了Go...
如果你需要同时处理大量请求,可能需要考虑多线程或异步处理。 在实际项目中,为了更好地管理HTTP路由,可以使用路由库如`Spark`或`Route4Me`,它们基于NanoHttpd,提供了更高级别的抽象和路由匹配功能。 最后,`...
5. **性能优化**:在处理大量文件或大文件时,可以考虑使用异步操作来避免阻塞UI线程。C#的async/await关键字可以帮助我们在不牺牲用户体验的情况下,执行耗时的操作。 总之,C#提供了丰富的工具和类库,使得在应用...
5. **使用多线程**: 如果在非UI线程中显示消息框,可能会引发异常。在这种情况下,需要确保消息框在正确的线程上下文中显示,可以使用`Control.Invoke`或`Control.BeginInvoke`方法。 6. **代码示例**: 以下是...
本文将详述如何在Android 4.0及以上版本中,通过WiFi环境实现真机(即实际运行Android系统的设备)与PC服务器端进行数据交换,并且会特别关注在网络操作时的多线程处理。 首先,我们要明白为什么在Android 4.0以上...
因此,务必确保在生产环境中对所有SQL语句进行充分的验证和测试,避免引入潜在的安全问题。 总的来说,mysqli的`multi_query()`方法为PHP开发人员提供了一种有效的方式来提高数据库操作的效率,尤其是在处理大量...
- **线程和进程**:支持多线程编程,包括线程同步、互斥锁、信号量等。 - **国际化和本地化**:支持多语言环境下的字符串处理。 **2. POCO库的特点** - **跨平台**:POCO库在Windows、Linux、macOS、iOS、Android等...
MFC应用默认使用单线程公寓模型(STA),而COM组件可能需要运行在多线程公寓(MTA)或自由线程(Free Threaded)环境中。确保MFC应用和COM组件的线程模型匹配,是成功调用的关键。 总的来说,MFC调用COM组件的dll...
// 多线程处理每个客户端请求 } } static class ClientHandler implements Runnable { private Socket client; public ClientHandler(Socket client) { this.client = client; } @Override public void...