日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

综合应用题:多线程复制文件(知识点:多线程、随机读写流)

發(fā)布時(shí)間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 综合应用题:多线程复制文件(知识点:多线程、随机读写流) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

要求:使用多線程復(fù)制一個(gè)文件(使用多線程復(fù)制一個(gè)文件可以加快文件的復(fù)制速度)

代碼:

package 多線程復(fù)制文件;import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile;public class Test {public static void main(String[] args) {//這里我們使用4個(gè)線程同時(shí)復(fù)制一個(gè)文件---復(fù)制一個(gè)視頻// 先獲取文件的長(zhǎng)度 length()File file = new File("D:\\線程.wmv");long l = file.length();//平均每段長(zhǎng)度:長(zhǎng)度/4 int avgLength = (int)l/4;// 創(chuàng)建四個(gè)線程對(duì)象 傳遞 起始 和終止位置//注意:最后一段的結(jié)束位置:因?yàn)?-長(zhǎng)度/4--不一定能不除盡,可能有余數(shù),所以必須在最后一節(jié)將剩余的都算上來(lái)MyThead thead = new MyThead(0, avgLength-1);MyThead thead2 = new MyThead(avgLength, 2*avgLength-1);MyThead thead3 = new MyThead(avgLength*2, 3*avgLength-1);MyThead thead4 = new MyThead(3*avgLength, (int)file.length()-1);// 啟動(dòng)線程thead.start();thead2.start();thead3.start();thead4.start();} }//子線程 class MyThead extends Thread{int start;int end;public MyThead(int start,int end) {this.start = start;this.end = end;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"啟動(dòng)了");// 根據(jù)位置賦值文件 RandomAccessFile read = null;RandomAccessFile write = null;try {read = new RandomAccessFile(new File("D:\\線程.wmv"), "rw");write = new RandomAccessFile(new File("D:\\線程2.wmv"), "rw");// 2 設(shè)置讀寫(xiě)位置read.seek(start);write.seek(start);// 指定位置開(kāi)始讀寫(xiě)// 讀過(guò)的長(zhǎng)度與要讀的長(zhǎng)度相等 則此段落復(fù)制完畢int length = end-start+1;// 每個(gè)線程要讀的長(zhǎng)度int readLength = 0;// 已經(jīng)讀了的長(zhǎng)度byte[] bs = new byte[1024];while(true){//因?yàn)槊慷我獜?fù)制的長(zhǎng)度不一定恰好是1024的整數(shù)倍,夠1024時(shí),直接讀寫(xiě)即可;不滿1024時(shí),有多少就讀多少//因此這里需要將剩余文件長(zhǎng)度與1024進(jìn)行比較// 判斷剩余字節(jié)個(gè)數(shù)是否小于1024---1024為byte數(shù)組中定義的長(zhǎng)短 // 如果不小 正常讀取1024 4097// 如果小于 只讀 剩余的 總長(zhǎng)度-讀取了的長(zhǎng)度if(length-readLength<1024){read.read(bs, 0, length-readLength);// 不夠1024的時(shí)候單獨(dú)讀一次write.write(bs, 0, length-readLength);break;}else{// 剩余需要讀的內(nèi)容 大于等于1024read.read(bs);write.write(bs, 0, 1024);readLength+=1024;}}System.out.println(Thread.currentThread().getName()+"復(fù)制完畢");} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(read!=null){try {read.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(write!=null){try {write.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}} }

總結(jié)

以上是生活随笔為你收集整理的综合应用题:多线程复制文件(知识点:多线程、随机读写流)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。