เมนู

การคัดลอกไฟล์ Java (ง่ายและรวดเร็ว)

สารบัญ

การคัดลอกไฟล์ Java (ง่ายและรวดเร็ว)FileChannel#โอนไปยัง

ในประเทศชวาคัดลอกไฟล์แนะนำโปรแกรมตัวอย่างเพื่อทำสิ่งนี้
โปรแกรมตัวอย่างอิงตาม New I/O ที่นำมาใช้ใน J2SE1.4 java.nio.channels.FileChannel#transferTo วิธี.
คุณสามารถเขียนโปรแกรมประมวลผลสำเนาได้โดยไม่ต้องกังวลกับบัฟเฟอร์ที่จำเป็นในการอ่านข้อมูล ทำให้เป็นวิธีการเข้ารหัสที่ง่ายที่สุด

ช่องคืออะไร?

คำว่า channel ถูกใช้ในรูปแบบต่างๆ มากมาย
โดยพื้นฐานแล้วดูเหมือนว่าจะระบุเส้นทางการส่งข้อมูลสำหรับการป้อนข้อมูลและการส่งออกระหว่างอุปกรณ์อื่น ๆjava.nio.channels.FileChannel เป็นคลาสที่แสดงถึงการเชื่อมต่อสำหรับการอ่านและการเขียนไฟล์

โอนไปยัง วิธีการสามารถถ่ายโอนไบต์จากไฟล์ต้นทางไปยังช่องปลายทาง

ข้อมูลต่อไปนี้อ้างอิงจากเอกสาร JavaAPI

TransferTo (ตำแหน่งยาว, จำนวนยาว, เป้าหมาย WritableByteChannel)
ถ่ายโอนไบต์จากไฟล์ของช่องนี้ไปยังช่องไบต์ที่เขียนได้ที่ระบุ
วิธีนี้จะมีประสิทธิภาพมากกว่าการวนซ้ำแบบธรรมดาที่อ่านข้อมูลจากช่องนี้และเขียนลงในช่องเป้าหมาย ระบบปฏิบัติการหลายระบบสามารถถ่ายโอนไบต์ได้โดยตรงจากแคชของระบบไฟล์ไปยังช่องสัญญาณเป้าหมาย ในขณะนี้ จะไม่มีการคัดลอกไบต์

ผลการตรวจสอบนี้แสดงวิธีการใช้สตรีมปกติ
กระบวนการคัดลอกเร็วกว่าวิธี FileChannel อื่นๆ (เช่น การใช้วิธี ByteBuffer#allocateDirect)


โปรแกรมตัวอย่าง

การดำเนินการ

ในการคัดลอกไฟล์โปรแกรมตัวอย่าง เราได้เตรียมไฟล์ขนาด 100MB "100M.txt" ไว้ใต้ไดรฟ์ C โดยตรง
ในโปรแกรมตัวอย่าง C:\100M.txt โดยการคัดลอก C:\a.txt สร้างไฟล์.

ตัวอย่างถูกดำเนินการในสภาพแวดล้อมต่อไปนี้
ระบบปฏิบัติการ: WindowsXP
ซีพียู: แอธลอน 1.46GHz
หน่วยความจำ: 1GB
เจอาร์อี: 1.6.4

◆ตัวอย่างการดำเนินการ

/** * ตัวอย่างการดำเนินการ * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } catch (IOException จ) { e.printStackTrace(); } }

◆ผลการดำเนินการ


 FileChannel#โอนไปยัง ในการประมวลผลการคัดลอกโดยใช้วิธีการ
การคัดลอกไฟล์ขนาด 100MB เสร็จสิ้นในเวลาประมาณ 3 วินาที นอกจากนี้ การใช้งานฮีประหว่างกระบวนการคัดลอกก็ประมาณ 300 (KB)

อนึ่ง,คัดลอกไฟล์ Java (เปลี่ยนขนาดบัฟเฟอร์)โดยวิธีการที่ได้แนะนำมานั้น
เมื่อเราระบุขนาดบัฟเฟอร์ที่มีประสิทธิภาพสูงสุดที่ 1,000KB เวลาในการประมวลผลจะอยู่ที่ประมาณ 4 วินาที และการใช้งานฮีปจะอยู่ที่ประมาณ 1,300KB

แม้แต่การคัดลอกไฟล์ด้วยสตรีมก็สามารถเร่งความเร็วได้ด้วยการปรับขนาดบัฟเฟอร์เช่นกัน
อาจกล่าวได้ว่ากระบวนการคัดลอกไฟล์เดียวไม่แตกต่างกันมากนัก
อย่างไรก็ตาม เมื่อคัดลอกไฟล์ขนาดใหญ่อย่างต่อเนื่องหรือดำเนินการกระบวนการคัดลอกหลายรายการพร้อมกัน FileChannel จะมีประสิทธิภาพในแง่ของความเร็วในการประมวลผลและการใช้งานฮีป

  • URL をkoピーしました!
สารบัญ