try {
String urlname = "http://219.147.83.244/695EF05563F718C926E37E9/03000A010059F1DF936FEE01233E8D995A1F67-7C9C-B63F-01CE-B5EA6252C012."
+ "mp4?ali_redirect_domain=vali-dns.cp31.o"
+ "tt.cibntv.net&ccode=0502&duration=62&expire=18000&"
+ "psid=2ac4ca6e7cf55a1435d242c356b17eb2&ups_client_ne"
+ "tip=222.168.152.224&ups_ts=1509081807&ups_userid=33"
+ "8784644&utid=341CEpTrYAECAd6of4zTB4VO&vid=XMzExMjY0OT"
+ "I1Mg%3D%3D&vkey=A4e308094022f9680ab63ca1076ed02c8";
URL url = new URL(urlname);
URLConnection conn = url.openConnection();
int length = conn.getContentLength();
System.out.println("leng
博主自己写的一个多线程下载文件的小程序/** * 爬虫多线程下载文件 * * @author ChenYiFan * */public class Test { public static void main(String[] args) { try { String urlname = "http://219.147.83.244/695E
多线程
下载
文件的思路:
1.首先获取到文件的总大小
获取文件大小的方式是通过网络读取,getContentLength()即可获取到文件的大小,使用RandomAccessFile()支持随机访问
2.根据所准备的线程数据,计算每一个线程需要
下载
的文件的大小
上图显示
下载
400M的电影分4个线程
下载
,每一个线程分别
下载
各自数据段中的数据,第一个线程
下载
0-100M,第二个
下载
100
import
java
.io.IOException;
import
java
.io.InputStream;
import
java
.io.RandomAccessFile;
import
java
.net.HttpURLConnecti...
文章目录1.线程介绍2.线程间的通信3.BIO编程4.NIO编程4.1概述4.2 文件 IO4.2.1 概述和核心 API4.2.2 案例1. 往本地文件中写数据2. 从本地文件中读数据3.复制文件
1.线程介绍
线程是比进程更小的能独立运行的基本单位,它是进程的一部分,一个进程可以拥有多个线程,但至少要有一个线程,即主执行线程(
Java
的 main 方法)。我们既可以编写单线程应用,也可以编写...
JAVA
实现
多线程
下载
大文件
开发中遇到一个问题,
下载
大文件到本地,导致等待时间过长,然后就寻找一个可以
多线程
下载
的办法,受
下载
软件启发,想到
多线程
下载
,
原理,首先查到这个文件的大小,然后根据线程数量去分配每个线程
下载
多大的片段,然后将每个线程的组合到一起,就是最终的
下载
文件。如图
然后就是代码时间, 必不可少的控制层
@Override
@ApiOperation(value = "
多线程
获取大文件", httpMethod = "POST")
@BodyValida
在
Java
中实现
多线程
压缩
视频
流
下载
可以使用`
java
.util.concurrent`包中线程池来管理线程,并使用`
java
.zip`包中的压缩相关类进行
视频
流的压缩。
以下是一个简单的示例代码,演示如何使用
多线程
压缩
视频
流
下载
:
```
java
import
java
.*;
import
java
.net.URL;
import
java
.util.concurrent.ExecutorService;
import
java
.util.concurrent.Executors;
import
java
.util.zip.ZipEntry;
import
java
.util.zip.ZipOutputStream;
public class VideoDownloader {
public static void main(String[] args) {
// 定义
视频
流URL
String videoUrl = "http://example.com/video.mp4";
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
try {
// 打开
视频
流
InputStream videoStream = new URL(videoUrl).openStream();
// 创建输出压缩文件
FileOutputStream zipFileOutput = new FileOutputStream("compressed_video.zip");
ZipOutputStream zipStream = new ZipOutputStream(zipFileOutput);
// 启动
多线程
下载
和压缩
视频
流
for (int i = 0; i < 5; i++) {
executor.execute(new VideoDownloaderTask(videoStream, zipStream, i));
// 等待所有任务完成
executor.shutdown();
while (!executor.isTerminated()) {
// 等待线程池中的任务完成
// 关闭压缩流和
视频
流
zipStream.close();
videoStream.close();
System.out.println("
视频
下载
和压缩完成!");
} catch (IOException e) {
e.printStackTrace();
class VideoDownloaderTask implements Runnable {
private InputStream videoStream;
private ZipOutputStream zipStream;
private int taskId;
public VideoDownloaderTask(InputStream videoStream, ZipOutputStream zipStream, int taskId) {
this.videoStream = videoStream;
this.zipStream = zipStream;
this.taskId = taskId;
@Override
public void run() {
try {
// 创建
视频
文件输出流
FileOutputStream videoOutput = new FileOutputStream("video_" + taskId + ".mp4");
// 缓冲区大小
byte[] buffer = new byte[1024];
int bytesRead;
// 读取
视频
流并写入输出文件
while ((bytesRead = videoStream.read(buffer)) != -1) {
videoOutput.write(buffer, 0, bytesRead);
// 关闭
视频
文件输出流
videoOutput.close();
// 将输出文件添加到压缩流中
FileInputStream videoInput = new FileInputStream("video_" + taskId + ".mp4");
ZipEntry entry = new ZipEntry("video_" + taskId + ".mp4");
zipStream.putNextEntry(entry);
while ((bytesRead = videoInput.read(buffer)) != -1) {
zipStream.write(buffer, 0, bytesRead);
// 关闭
视频
文件输入流
videoInput.close();
// 完成任务
System.out.println("任务 " + taskId + " 完成!");
} catch (IOException e) {
e.printStackTrace();
以上代码创建了一个线程池,然后使用多个线程从
视频
流中读取数据,并将数据写入单独的
视频
文件。接着,将每个
视频
文件添加到压缩流中,最终生成一个压缩文件。
请注意,上述示例只是一个简单的演示,实际应用中可能需要更多的错误处理和优化。另外,压缩
视频
流可能需要使用更特定的库或工具,具体取决于你要使用的
视频
编码格式和压缩算法。