ขนาดไฟล์ไบนารีกับ ASCII


17

ฉันต้องการเขียนข้อมูลบางอย่างจากการคำนวณซึ่งจะอ่านในภายหลังโดย Paraview (ไฟล์. vtu หรือ vtk)

เมื่อพูดถึงขนาดของไฟล์ฉันควรใช้รูปแบบ ASCII หรือรูปแบบไบนารีหรือไม่

คำตอบ:


20

หากกังวลเพียงอย่างเดียวของคุณคือขนาดไฟล์แล้วคุณต้องการไฟล์ไบนารี สำหรับตัวอย่างที่เป็นตัวอย่างสมมติว่าคุณกำลังเขียนเลขทศนิยมที่มีความแม่นยำสูง 1 คู่ไปยังไฟล์ สมมติว่าระบบไฟล์สามารถจัดการสิ่งนี้ได้อย่างสมบูรณ์แบบและถือไฟล์ส่วนหัวและช่องว่างภายในทั้งหมด 0

สำหรับไฟล์ไบนารีหมายเลขนั้นจะใช้ขนาดที่แน่นอนของตัวเลขใน RAM หรือ 8 ไบต์

ในรูปแบบ ASCII มันจะถือ:

  • 16 หลักของฐาน
  • 1 งวดสำหรับทศนิยม
  • 1 ถ่านเพื่อคั่นเลขชี้กำลัง
  • 1 ถ่านสำหรับสัญลักษณ์ของเลขชี้กำลัง
  • 2-3 ถ่านสำหรับเลขยกกำลัง

สมมติว่ามันใช้เพียง 1 ไบต์สำหรับตัวอักษรนั่นคือ 22 ไบต์เพื่อเก็บหมายเลขเดียวกัน สิ่งนี้จะไม่นับตัวอักษรที่จำเป็นในการปรับลดจำนวนระหว่างตัวเลข (โดยปกติจะน้อยกว่า 1) ดังนั้นขนาดไฟล์สำหรับรูปแบบ ASCII จะใหญ่กว่าประมาณ 3 เท่า

คุณสามารถแลกเปลี่ยนขนาดไฟล์เพื่อความแม่นยำในไฟล์ที่จัดเก็บ (เก็บไว้เพียง 5-6 หลักในฐาน) แต่ขึ้นอยู่กับสิ่งที่คุณกำลังใช้งาน ข้อได้เปรียบหลักของ ASCII สำหรับการดีบั๊กหรือการผลิตข้อมูลที่มนุษย์อ่านได้


3
ยังมีความสำคัญในเวทีทางวิทยาศาสตร์ในระยะยาวการเก็บและการแบ่งปันที่เชื่อถือได้ซึ่งเป็นเหตุผลที่แม้จะมีความไร้ประสิทธิภาพของมัน, CSV ASCII เป็นที่แพร่หลายและแนะนำ (PDF)
horchler

2
อีกจุดที่มีประโยชน์คือแม้ว่าการเข้ารหัส ASCII CSV จะไม่มีประสิทธิภาพมากนักโดยใช้ยูทิลิตี้การบีบอัดไฟล์ (เช่น zip, gzip และอื่น ๆ ) บนไฟล์ ascii ของคุณโดยทั่วไปแล้วจะทำให้ขนาดไฟล์เล็กลงคล้ายกับขนาดของไฟล์ไบนารี .
Brian Borchers

3
ระวังเนื่องจากไลบรารี่อินพุต / เอาท์พุตบางส่วนนั้นไม่ได้ระวังมากพอที่จะรับบิตของการทำซ้ำบิตในขณะที่คุณส่งออกตัวเลข IEEE Double Precision ใน ASCII แล้วอ่านมันกลับมาในประสบการณ์ของฉันในบางครั้งการใช้ทศนิยม 17 หรือ 18 หลัก .
Brian Borchers

5
ความคิดเห็นที่เกี่ยวข้องกับนักดูถูก: ฉันแน่ใจว่ารูปแบบไบนารีมาตรฐานเปิดที่ได้รับการใช้งานอย่างดีเช่น HDF5 จะอยู่เป็นเวลานาน นั่นคือสิ่งที่ฉันแนะนำเป็นการส่วนตัว
AlexE

1
+ ฉันยึดติดกับไบนารีทุกครั้งที่ทำได้เพื่อความถูกต้องความกะทัดรัดความสบายใจและความเร็ว (โดยเฉพาะ) ถ้าฉันต้องการความกะทัดรัดเพิ่มเติมฉันสามารถซิปได้ หากฉันต้องสามารถอ่านเนื้อหาด้วยสายตาได้ฉันสามารถเขียนโปรแกรมเล็กน้อยสำหรับสิ่งนั้นได้ ในทางกลับกันถ้าสิ่งสำคัญกว่าคือการมองเห็นและส่งผ่านไปยังโปรแกรมสุ่มเช่น Excel, R และอื่น ๆ ได้อย่างง่ายดาย CSV คือวิธีที่จะไป
Mike Dunlavey

15

ในทางปฏิบัติคุณไม่ค่อยต้องการข้อมูลในไฟล์การสร้างภาพที่แม่นยำกว่าพูด 3 หลักที่ถูกต้อง ในกรณีนั้น ASCII อาจจะมีขนาดเล็กกว่ารูปแบบไบนารี หากคุณกำลังคิดเกี่ยวกับการเก็บถาวรดังนั้นการบีบอัดไฟล์ ASCII เหล่านี้น่าจะทำให้ได้ไฟล์ที่เล็กที่สุดที่คุณจะได้รับ

ที่กล่าวว่า Paraview อ่านรูปแบบ VTU ซึ่งมีรูปแบบไบนารีที่บีบอัด (อิงตาม XML แต่ข้อมูลจะถูกบีบอัด libz ก่อนแล้วจึง uuencoded อีกครั้งเพื่อให้ข้อความ ASCII) สำหรับไฟล์ทั่วไปสิ่งนี้จะบันทึกปัจจัย 4-10 สำหรับไฟล์ขนาดใหญ่วิธีนี้จะเป็นไปอย่างแน่นอน


2
ฉันโหวตสิ่งนี้เพื่อเปรียบเทียบกับคำตอบอื่น ฉันไม่มีความเห็นที่แข็งแกร่ง แต่อย่างใด แต่ก็มีประเด็นที่ดีที่ได้มาที่นี่
Bill Barth

อีกวิธีหนึ่งคือศูนย์บิตต่ำและบีบอัดไบนารี
Jed Brown

ว้าวนั่นคงต้องเล่นซอสักหน่อย หรือมีฟังก์ชั่นที่ทำเช่นนั้น? (นอกเหนือจากการคัดเลือกนักแสดงที่จะลอยและกลับมาเป็นสองเท่า)
Wolfgang Bangerth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.