Kích thước tệp nhị phân so với ASCII


17

Tôi cần phải viết một số dữ liệu từ một tính toán, sẽ được đọc sau bởi Paraview (tệp .vtu hoặc vtk).

Khi nói đến kích thước tệp, tôi nên sử dụng định dạng ASCII hoặc định dạng nhị phân?

Câu trả lời:


20

Nếu lo lắng duy nhất của bạn là kích thước tệp, thì bạn muốn tệp nhị phân. Đối với một ví dụ minh họa, giả sử bạn đang viết 1 số dấu phẩy động chính xác gấp đôi vào một tệp. Giả sử rằng hệ thống tệp có thể xử lý việc này một cách hoàn hảo và giữ tệp, tiêu đề và phần đệm đều bằng 0.

Đối với tệp nhị phân, số đó sẽ lấy kích thước chính xác của số trong RAM hoặc 8 byte.

Trong định dạng ASCII, nó sẽ giữ:

  • 16 chữ số của cơ sở
  • 1 kỳ cho số thập phân
  • 1 char để phân định số mũ
  • 1 char cho dấu của số mũ
  • 2-3 char cho số mũ

Giả sử nó chỉ sử dụng 1 byte cho một ký tự, đó là 22 byte để giữ cùng một số. Điều này không tính các ký tự được yêu cầu để phân biệt giữa các số (thường là ít nhất 1). Do đó, kích thước tệp cho định dạng ASCII sẽ lớn hơn khoảng 3 lần.

Bạn có thể giao dịch về kích thước tệp cho độ chính xác trong các tệp được lưu trữ (chỉ giữ 5-6 chữ số trong cơ sở), nhưng điều đó phụ thuộc vào việc bạn đang sử dụng chúng để làm gì. Ưu điểm chính của ASCII là gỡ lỗi hoặc tạo dữ liệu có thể đọc được của con người.


3
Ngoài ra, điều quan trọng trong lĩnh vực khoa học là lưu trữ lâu dài và chia sẻ đáng tin cậy, đó là lý do tại sao, mặc dù không hiệu quả, ASCII CSV rất phổ biến và được đề xuất (PDF) .
horchler

2
Một điểm hữu ích khác là mặc dù mã hóa ASCII CSV không hiệu quả lắm, nhưng sử dụng tiện ích nén tệp (như zip, gzip, v.v.) trên tệp ascii của bạn thường sẽ giảm kích thước tệp xuống tương tự như kích thước của tệp nhị phân .
Brian Borchers

3
Hãy cẩn thận vì một số thư viện đầu vào / đầu ra không đủ cẩn thận để có thể tái tạo bit khi bạn xuất các số chính xác của Double Double trong ASCII và sau đó đọc lại chúng. Theo kinh nghiệm của tôi, đôi khi sử dụng 17 hoặc 18 chữ số thập phân là cần thiết cho an toàn .
Brian Borchers

5
Liên quan đến nhận xét của horchler: Tôi chắc chắn các định dạng nhị phân mở được tiêu chuẩn hóa, được sử dụng tốt như HDF5 sẽ xuất hiện trong một thời gian dài. Đó là những gì cá nhân tôi muốn giới thiệu.
AlexE

1
+ Tôi gắn bó với nhị phân bất cứ khi nào có thể, cho độ chính xác, gọn nhẹ, yên tâm và (đặc biệt) tốc độ. Sau đó, nếu tôi cần sự gọn nhẹ hơn nữa, tôi có thể nén nó. Nếu tôi cần có thể đọc trực quan nội dung, tôi có thể viết một chương trình nhỏ cho điều đó. Mặt khác, nếu điều quan trọng hơn là trực quan và dễ dàng chuyển qua các chương trình ngẫu nhiên như Excel, R, v.v. thì CSV là con đường để đi.
Mike Dunlavey

15

Trong thực tế, bạn hiếm khi cần dữ liệu trong các tệp trực quan chính xác hơn 3 chữ số hợp lệ. Trong trường hợp đó, ASCII - có thể đáng ngạc nhiên - thường nhỏ gọn hơn dạng nhị phân. Nếu bạn đang suy nghĩ về việc lưu trữ, thì việc nén các tệp ASCII này có thể sẽ mang lại các tệp nhỏ nhất bạn có thể nhận được.

Điều đó nói rằng, Paraview đọc định dạng VTU có dạng nhị phân nén (dựa trên XML, nhưng dữ liệu đầu tiên được nén libz và sau đó được mã hóa lại để tạo ra văn bản ASCII). Trên các tệp thông thường, điều này giúp tiết kiệm hệ số 4-10. Đối với các tệp lớn, đây chắc chắn là cách để đi.


2
Tôi đã bỏ phiếu này cho sự tương phản với câu trả lời khác. Tôi cũng không có ý kiến ​​mạnh mẽ, nhưng có một điểm tốt để có ở đây.
Bill Barth

Ngoài ra, rõ ràng bằng không các bit thấp và nén nhị phân.
Jed Brown

Wow, điều đó sẽ đòi hỏi một chút khó khăn. Hoặc có những chức năng làm điều đó? (Khác với việc đúc để nổi và trở lại gấp đôi.)
Wolfgang Bangerth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.