การแบ่งส่วนไฟล์และการรวมเป็นข้อกำหนดทั่วไป ตัวอย่างเช่น: เมื่ออัปโหลดไฟล์ขนาดใหญ่พวกเขาสามารถแบ่งออกเป็นชิ้นเล็ก ๆ ก่อนจากนั้นจึงถ่ายโอนไปยังเซิร์ฟเวอร์ก่อนที่จะรวมเข้าด้วยกัน ในระบบไฟล์แบบกระจายระดับไฮเอนด์จำนวนมาก (เช่น GFS ของ Google และ TFS ของ Taobao) ไฟล์จะถูกแบ่งหรือรวมกันตามหน่วยบล็อก
ดูแนวคิดพื้นฐาน:
หากมีไฟล์ขนาดใหญ่ให้ระบุขนาดแยก (ตัวอย่างเช่น: ตัดโดย 1m)
ขั้นตอนที่ 1:
ขั้นแรกให้คำนวณจำนวนไฟล์ขนาดเล็กที่ถูกแบ่งออกตามขนาดไฟล์ต้นฉบับและขนาดการแบ่งส่วน
ขั้นตอนที่ 2:
สร้างไฟล์ขนาดเล็ก n เหล่านี้บนดิสก์
ขั้นตอนที่ 3:
เปิดหลายเธรด (จำนวนเธรด = จำนวนไฟล์แยก) ในแต่ละเธรดให้ใช้ฟังก์ชั่นการค้นหาของ RandomAccessFile เพื่อค้นหาตัวชี้การอ่านไปยังตำแหน่งแรกของแต่ละเซ็กเมนต์ในไฟล์ต้นฉบับจากนั้นอ่านขนาดที่ระบุไปข้างหลัง (เช่นขนาดของบล็อกแบ่งส่วน) และในที่สุดก็เขียนไฟล์แยกที่เกี่ยวข้อง เนื่องจากกระบวนการแบบมัลติเธรดในแบบคู่ขนานแต่ละคนเขียนไฟล์ขนาดเล็กของตัวเองซึ่งค่อนข้างเร็ว
รหัสต่อไปนี้คือการแบ่งไฟล์เป็นหลายไฟล์ย่อยแต่ละไฟล์มีขนาด 100k
แพ็คเกจ testio; นำเข้า java.io.file; นำเข้า java.io.fileinputstream; นำเข้า java.io.fileoutputStream; นำเข้า java.util.Arrays; ชั้นสาธารณะชั้นสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// อ่านไฟล์แหล่งที่มา ไฟล์ ("f: /test/test.txt"); // สร้างวัตถุ File Splitfile (srcfile, udsize);} โมฆะสปลิตแบบคงที่สาธารณะ (ไฟล์ srcfile, int adverssize) {// กำหนดว่าไฟล์ตรงตามข้อกำหนดแยกหรือไม่ (srcfile.length () ข้อกำหนด ");} byte [] fileContent = byte ใหม่ [(int) srcfile.length ()]; ลอง {// อ่านเนื้อหาไฟล์ลงในหน่วยความจำ fileinputstream fis = fileinputstream ใหม่ (srcfile); fis.read (fileContent); fis.close ถูกแบ่งออกเป็น filenumber; ถ้า (fileContent.length%udsize == 0) {filenumber = fileContent.length/odsize;} else {filenumber = filecontent.length/udsize+1;} สำหรับ (int i = 0; i <filenumber; i ++) = ไฟล์ใหม่ (srcfile.getParent (), filename); // สร้างไฟล์แยกภายใต้เส้นทางไฟล์ปัจจุบันไบต์ [] แต่ละ content; // คัดลอกเนื้อหาไฟล์แหล่งที่มาลงในไฟล์แยกถ้า (i! arrays.copyofRange (fileContent, udsize*i, fileContent.length);} ลอง {fileOutputStream fos = ใหม่ fileOutputStream (fi); fos.write (แต่ละ content); fos.close (); %d/n ", fi.getabsolutefile (), fi.length (), outcontent.length);} catch (ข้อยกเว้น e) {// todo: จัดการข้อยกเว้น e.printstacktrace ();}}}}}}}}สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการแยกไฟล์ออกเป็นตัวอย่างรหัสย่อยหลายตัวอย่าง ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!