เมนู

การคัดลอกไฟล์ Java (เปลี่ยนขนาดบัฟเฟอร์)

สารบัญ

การคัดลอกไฟล์ Java (เปลี่ยนขนาดบัฟเฟอร์)

ในภาษาจาวา java.io.InputStreamjava.io.OutputStream ที่
ส่วนนี้จะนำเสนอโปรแกรมตัวอย่างที่ทำการคัดลอกข้อมูลโดยใช้สตรีมอินพุต/เอาต์พุต
ในการคัดลอกแบบสตรีม การเพิ่มขนาดบัฟเฟอร์การอ่านจะช่วยให้การคัดลอกทำได้เร็วขึ้น แม้แต่ไฟล์ขนาดใหญ่ก็ตาม
โปรแกรมตัวอย่างนี้อนุญาตให้คุณระบุขนาดบัฟเฟอร์การอ่านข้อมูลเป็นอาร์กิวเมนต์ได้

พื้นที่บัฟเฟอร์สำหรับการอ่านที่ระบุไว้จะถูกจัดสรรภายในฮีปของ Java VM ดังนั้นการกำหนดขนาดที่ใหญ่เกินไปจะลดประสิทธิภาพลง ด้วยเหตุนี้ เมื่อคัดลอกไฟล์ เราจึงต้องตรวจสอบขนาดบัฟเฟอร์สำหรับการอ่านข้อมูลที่เหมาะสมที่สุดด้วย

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


การประหารชีวิต

เพื่อคัดลอกไฟล์โปรแกรมตัวอย่าง ฉันได้เตรียมไฟล์ขนาด 100MB ชื่อ "100M.txt" ไว้ในไดรฟ์ C โดยตรง ในโปรแกรมตัวอย่างนั้น C:\100M.txt ข้อมูลจะถูกอ่านในบัฟเฟอร์ขนาด 1000 กิโลไบต์ ซี:\อะ.txt คัดลอกไปยัง [ตำแหน่ง]

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

◆ตัวอย่าง

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

◆ผลลัพธ์การดำเนินการ


การเปลี่ยนขนาดบัฟเฟอร์

ในการกำหนดขนาดบัฟเฟอร์การอ่านข้อมูลที่มีประสิทธิภาพเมื่อคัดลอกไฟล์ ควรตั้งค่าอาร์กิวเมนต์ที่สามของ copyStream เป็น
ผลลัพธ์ของการดำเนินการคัดลอกแบบเดียวกันในหน่วยขนาด 1KB, 100KB, 1000KB และ 10000KB สรุปได้ดังนี้



แม้ว่าเราจะไม่สามารถสรุปผลที่แน่ชัดได้จากผลลัพธ์ข้างต้นเพียงอย่างเดียว แต่หากระบุขนาดบัฟเฟอร์การอ่านข้อมูลเป็นหน่วย 1000KB
ผลการทดสอบแสดงให้เห็นว่าระบบมีประสิทธิภาพในแง่ของการใช้หน่วยความจำและเวลาในการประมวลผลระหว่างการดำเนินการคัดลอก
นอกจากนี้ ยังได้ผลลัพธ์ที่คล้ายคลึงกันแม้ว่าจะเพิ่มขนาดไฟล์ (เป็นประมาณ 1GB) ก็ตาม

ในทางกลับกัน เมื่อคัดลอกไฟล์ขนาดเล็ก (ประมาณ 1MB หรือน้อยกว่า) การเพิ่มขนาดบัฟเฟอร์นั้นไม่มีประโยชน์ ดังนั้นจึงควรเลือกขนาดบัฟเฟอร์ประมาณ 100KB จะดีที่สุด

ใช้ FileChannel เพื่อความเร็วที่เร็วขึ้น


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

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