เมนู

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

สารบัญ

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

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

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

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


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

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

ตัวอย่างถูกดำเนินการในสภาพแวดล้อมต่อไปนี้
ระบบปฏิบัติการ: WindowsXP
ซีพียู: แอธลอน 1.46GHz
หน่วยความจำ: 1GB
เจอาร์อี: 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, 1,000KB และ 10,000KB มีการสรุปไว้ด้านล่าง



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

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

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


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

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