导航:首页 > 编程语言 > java多线程文件复制

java多线程文件复制

发布时间:2023-01-08 23:09:05

① 在java中,用多线程来搬运一个音频文件,求代码和详解!

代码没有,不过提供思路:
先将音频文件完全的读入。。
然后使用1M就开启一个线程的方法,并添加一个tag 例如:threadi:+音频第iM的数据,并开启一个socket将这个文件传输过去。结束的最后一段数据后面加上 :end标识
服务器开启10个等待连接的线程。接收到:end标识之后,将所有的文件根据之前的threadi来组织起来并创建音频文件。如果有线程没有接收有丢失,就服务器返回信息i. 客户端根据i重新传送

② 2、 使用多线程技术编写文件复制程序。(使用java编程)

package junit.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class CopyFiles implements Runnable {
/**
* 要复值到的地址
*/
private String toaddr;
/**
* 复制源
*/
private String source;
/**
*
* @param toaddr 要复值到的地址
* @param source 复制源
*/
public CopyFiles(String toaddr, String source) {
super();
this.toaddr = toaddr;
this.source = source;
} private void File( ) throws Exception { File f1 = new File(this.toaddr);
if(!f1.exists()){
f1.mkdir();
}
File source1 = new File(this.source);
if(source1.isDirectory()){
File t = new File(f1, source1.getName());
t.mkdir();
File[] files = source1.listFiles();
if (files != null) {
this.getfiles(files, t);
}
}else{
File[] files = source1.listFiles();
if (files != null) {
this.getfiles(files, f1);
}
}

} private void getfiles(File[] fs, File f) {
for (File file : fs) {
if (file.isDirectory()) {
File[] fi = file.listFiles();
File t = new File(f, file.getName());
t.mkdir();
if (fi != null) {
getfiles(fi, t);
}
} else {
InputStream in = null;
OutputStream out1 = null;
System.err.println(new File(f, file.getName()).getName());
try {
in = new FileInputStream(file);
System.err.println(f.getPath());
out1 = new FileOutputStream(new File(f, file.getName()));
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) > 0) {
out1.write(b, 0, i);
out1.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out1.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
} } }
}
} public void run() {
try {
File();
} catch (Exception e) {
e.printStackTrace();
}
} public String getToaddr() {
return toaddr;
} public void setToaddr(String toaddr) {
this.toaddr = toaddr;
} public String getSource() {
return source;
} public void setSource(String source) {
this.source = source;
}
}
这是我写的不知道是不是你想要的下面是测试类package junit.test;public class Test {
public static void main(String[] args) {
CopyFiles files = new CopyFiles("D:","C:\\新建文件夹");
Thread t = new Thread(files);
t.start();
}
}

③ 如何解决:多线程和单线程拷贝文件那个效率高

看场景;
效率的瓶颈不在代码的时候,比如用的最多的io操作,
下载器,下载服务器每个接口就给你500k的速度,那多线程相当于500*n,本地网络最大2m每秒,可以开3~5个线程自然快;
复制器,windows操作系统复制文件很慢,因为负责复制的api防止系统卡死每个线程就给你那点速度,如果用java写个多线程io流复制,速度快8倍左右;
这样的场合有个特点,速度或者说效率的关键不是java的处理能力,而是接口限制成了瓶颈;

举个反例,如果对一个集合进行遍历,打印value,使用多线程明显比单线程效率低;因为时间过多的消耗在了创建线程,销毁线程上,执行的有用代码和单线程没区别,效率不如单线程;

④ java大数据 多线程写文件

1、采用public static的变量存储这一数值,每个线程都往这一共有静态变量里写入已复制大小。 2、采用Callable方式实现多线程,将结果作为返回值返回到主线程。这一方法只能在所有子线程都完成之后才能通过future获取。

⑤ java 有比用多线程更快的复制技术吗

...瓶颈在硬件读写速度.....不在你单线程还是多线程....windows复制更接近直接控制硬件自然效率更高

看你的代码...复制的读写依然是在同一个线程内做的...你只是把这个过程独立于主线程处理了....这不会提高什么速度吧......正常多线程复制应该是两个线程 一个只负责从原文件往缓冲区读 一个只负责从缓冲区往目标文件写....

如果想得到更快的复制速度....恐怕只能直接操作硬盘扇区?

⑥ java 多线程复制文件

很简单,你的maxBufferSize没有赋值。

⑦ JAVA多线程复制文件,请大神帮我看看,哪里逻辑错了,调式了好久,都不成功。。

Copy c = new Copy();

放到循环里边去


for(inti=0;i<5;++i){
Copyc=newCopy();
c.set(i*size,(i+1)*size);//线程启动前,设置好文件的读取写入位置。
newThread(c).start();
}

⑧ java 根据一个文件内容同时操作多个文件

可以用多线程来操作,java8的异步多线程CompletionStage接口,就可以实现,或者不使用多线程使用单线程版反应器模式Reactor(反应器)定制几个处理器接口,根据第一个文件的内容来分发到不同的处理器来处理你具体的需求,具体代码有空可以写给你

阅读全文

与java多线程文件复制相关的资料

热点内容
php的基本语法 浏览:790
对外汉语pdf 浏览:516
如何用mamp本地web服务器 浏览:869
如何加密自己js代码 浏览:627
排列组合a与c的算法 浏览:534
如何在文件夹中找到同名内容 浏览:786
有什么app文字转韩文配音 浏览:372
循环宏1命令 浏览:35
斐波那契数列矩阵算法 浏览:674
公式保护后加密不了 浏览:82
java跳转到jsp 浏览:819
327平方根算法 浏览:216
win7美化命令行终端 浏览:797
免加密狗图片 浏览:485
一只透明的鸟是什么app 浏览:817
空气压缩机油批发商 浏览:69
linuxifexist 浏览:4
加密tf卡拷入文件 浏览:399
山西php工资 浏览:673
福州看病预约用什么小程序app 浏览:238