檔案的分片與合併

2021-10-11 21:44:47 字數 2319 閱讀 5892

**

// 簡介

randomaccessfile是乙個古老的類,它和inputstream outputstream 類系沒有關係,它的基本方法在jdk1.4之後就不用了,取而代之的是記憶體對映檔案方式(nio包),也就是把檔案對映到記憶體後再操作,省去了頻繁磁碟io,對使用者來說比較友好,而且更高效!所以在這裡採用randomaccessfile對檔案操作。

以下是**演示:`

// 檔案的分片

@test

@sneakythrows

public

void

shardingfile()

// 分塊大小(10mb)

long chunksize =

1024

*1024*10

;// 分塊數量

long chunknum =

(long

) math.

ceil

(sourcefile.

length()

*1.0

/ chunksize);if

(chunknum <=0)

// 緩衝區大小

byte

b =

newbyte

[1024];

randomaccessfile raf_read =

newrandomaccessfile

(sourcefile,

"r")

;long starttime = system.

currenttimemillis()

;for

(int i =

0; i < chunknum; i++)}

raf_write.

close()

;}} raf_read.

close()

;long endtime = system.

currenttimemillis()

; system.out.

println

("分片消耗的時間為:"

+(endtime - starttime)

/1000

+"秒");

}

// 檔案的合併

@test

@sneakythrows

public

void

mergefile()

// 建立新的合併檔案

mergefile.

createnewfile()

; randomaccessfile raf_write =

newrandomaccessfile

(mergefile,

"rw");

// 指標指向檔案頂端

raf_write.

seek(0

);// 緩衝區

byte

b =

newbyte

[1024];

// 分塊列表

file[

] filesarray = chunkfolder.

listfiles()

;long starttime = system.

currenttimemillis()

;// 轉為集合

list

filelist =

newarraylist

<

>

(arrays.

aslist

(filesarray));

// 合併需要從小到大排序

filelist.

sort

(new

comparator

()return1;

}});

// 合併檔案

for(file chunkfile : filelist)

raf_read.

close()

;}raf_write.

close()

;// 刪除分片資料夾

fileutils.

deletedirectory

(chunkfolder)

;long endtime = system.

currenttimemillis()

; system.out.

println

("合併的消耗的時間為:"

+(endtime - starttime)

/1000

+"秒");

}

httpclient 分片上傳檔案 檔案分片上傳

在業務場景中檔案上傳很普遍,而大檔案的上傳經常會導致上傳時長過久,大量占用頻寬資源,而分片上傳就解決了目前的問題。import react from react import from utils upload import concurrentutil from utils concurrent ...

IP分片與TCP分片的考慮

剛剛終於想明白了關於tcp分片後,為什麼抓包是從來沒看到過ip分片,而在pingicmp報文的時候,很容易就出現ip分片。之前考慮問題只考慮了一方面 作為接收方,tcp的mss欄位和ip的mtu欄位,在tcp連線的前兩次握手時,溝通好了,以小的值為最大傳輸位元組。一般情況下mtu 40 mss。具體...

檔案分片 檔案分片上傳原理解析

上傳大檔案時,我們一般都會採用分片上傳的方式,這樣如果上傳過程中斷了,下次繼續上傳的話就不用重新全部上傳,只需繼續上傳未上傳的部分即可,進而可以實現秒傳的效果。其原理其實就是在客戶端將檔案分割成多個小的分片,然後再將這些分片一片一片的上傳給服務端,服務端拿到所有分片後再將這些分片合併起來還原成原來的...