Segmentasi dan penggabungan file adalah persyaratan umum. Misalnya: Saat mengunggah file besar, mereka dapat dibagi menjadi potongan -potongan kecil terlebih dahulu, dan kemudian ditransfer ke server sebelum bergabung. Dalam banyak sistem file terdistribusi kelas atas (seperti Google GFS dan TFS Taobao), file juga dibagi atau digabungkan sesuai dengan unit blok.
Lihatlah ide -ide dasarnya:
Jika ada file besar, tentukan ukuran split (misalnya: potong 1m)
Langkah 1:
Pertama, hitung jumlah file kecil yang akhirnya dibagi berdasarkan ukuran file asli dan ukuran segmentasi.
Langkah 2:
Buat ini N file kecil di disk
Langkah 3:
Buka beberapa utas (jumlah utas = jumlah file split). Di setiap utas, gunakan fungsi TETECE dari acak ACCEACCESSFILE untuk menemukan pointer membaca ke posisi pertama setiap segmen dalam file asli, dan kemudian baca ukuran yang ditentukan ke belakang (mis., Ukuran blok tersegmentasi), dan akhirnya tulis file split yang sesuai. Karena proses multi-thread secara paralel, masing-masing menulis file kecilnya sendiri, yang relatif cepat.
Kode berikut adalah untuk membagi file menjadi beberapa subfile, masing -masing dengan ukuran 100K
Paket testio; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.util.arrays; kelas publik substream {public static void main (string [] args) {// baca file sumber ke dalam memori pertama masing -masing ukuran = 100*1024; File("F:/test/test.txt");//Create a file object splitFile(srcFile,eachSize);}public static void splitFile(File srcFile,int eachSize){//Determine whether the file meets the split requirements if(srcFile.length()==0){throw new RuntimeException("The file does not meet the split persyaratan ");} byte [] filecontent = byte baru [(int) srcfile.length ()]; coba {// baca konten file ke dalam memori fileinputStream fis = fileinputStream baru (srcfile); fis. int untuk dibagi menjadi bilangan filen; if (filecontent.length%masing-masing ukuran == 0) {filenumber = filecontent.length/masing-masing;} else {filenumber = filecontent.length/masing-masing+1;} untuk (int i = 0; i <filenumber; i ++) {string filename. fi = file baru (srcfile.getParent (), fileName); // Buat file split di bawah byte path file saat ini [] masing-masing konten; // salin konten file sumber ke dalam file split if (i! = masing-masing bumbu-1) {masing-masing content = arrays.copyofrange (FileContent, masing-masing, masing-masing i, i, {masing-masing i, {masing-masing) {i, masing-masing) {masing-masing) {masing-masing) {masing-masing i, {masing-masing. Arrays.copyofrange (filecontent, masing -masing*i, filecontent.length);} coba {fileoutputStream fos = new FileOutputStream (fi); fos.write (masing -masing konten); fos.close (); System.out.printf ("output Subfile %s, yang ukurannya adalah doze do, yang output %d, yang ukurannya adalah doze adalah do ukuran do, yang dose adalah do, yang dose adalah do, yang output %d, yang ukuran dose adalah dose adalah doze do, yang output %d, yang ukuran dose (); masing -masing doze adalah do ukuran d, yang output %s, masing -masing dose dose (); %d/n ", fi.getAbsoluteFile (), fi.length (), masing -masing content.length);} catch (exception e) {// todo: menangani pengecualian e.printstacktrace ();}}}}Meringkaskan
Di atas adalah seluruh konten artikel ini tentang membagi file menjadi beberapa contoh kode subfile. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!