Pliki binarne i formaty danych – o co w tym chodzi?

Od dawna fascynuje użytkowników Linuxa temat formatów plików i tego, jak komputer faktycznie przechowuje dane. Często korzystamy z różnych narzędzi i edytorów, ale rzadko zastanawiamy się, co tak naprawdę znajduje się „pod maską”.

Jak komputer widzi dane?

Dla maszyny wszystko to tylko zera i jedynki. My – ludzie – potrzebujemy tekstu, symboli czy obrazów, dlatego istnieją standardy, które pozwalają zamieniać te ciągi bitów na coś zrozumiałego.

Najpopularniejszy przykład to ASCII – w nim każdy bajt (8 bitów) odpowiada jednej literze czy znakowi. Litera A to liczba 65 w systemie dziesiętnym, 41 w szesnastkowym i 01000001 w binarnym.

Jeśli w Notatniku (albo w dowolnym edytorze tekstu w Linuxie) zapiszemy plik zawierający tylko literę „A”, jego rozmiar wyniesie dokładnie jeden bajt. Po otwarciu go w edytorze heksadecymalnym zobaczymy wartość 41, a obok literę „A”.

Pliki w hex-edytorze

Każdy plik można podejrzeć w postaci heksadecymalnej. Prosty tekst wygląda wtedy czytelnie – ale jeśli otworzymy np. plik wykonywalny, zobaczymy mnóstwo „śmieciowych” znaków i czasami jakieś fragmenty tekstu. To tzw. nagłówki lub magic numbers.
Dzięki nim system i programy wiedzą, z jakim formatem mają do czynienia – np. pliki PNG zaczynają się od liter „PNG”, a stare pliki EXE od liter „MZ”.

Liczby w plikach – tekst czy binarnie?

Ludzie zapisują liczbę 65 jako dwie cyfry: „6” i „5”. Komputer może przechować ją bezpośrednio w jednym bajcie.
Różnica robi się wyraźna przy dużych liczbach. Liczbę 4 000 000 000 człowiek zapisze jako 10 znaków ASCII (10 bajtów). Komputerowi wystarczą 4 bajty, bo tyle potrzeba, żeby przedstawić wszystkie liczby do około 4 miliardów (2^32).

Dlatego przechowywanie danych liczbowych w postaci binarnej oszczędza miejsce i ułatwia obliczenia.

Dlaczego więc nie zawsze binarnie?

Mimo że pliki binarne są efektywne, mają sporo wad:

  • Trudno je odczytać – ciąg 4 bajtów może oznaczać liczbę albo 4 znaki tekstu, człowiek nie ma szans tego zgadnąć.
  • Edycja jest kłopotliwa – żeby zmienić „4 miliardy” na „2 miliardy”, trzeba znać dokładną reprezentację binarną. W ASCII wystarczy zmienić cyfrę.
  • Brak prostych narzędzi – w świecie UNIX-a mamy potężne narzędzia do pracy z tekstem (grep, sed, awk). Na plikach binarnych nie działają one dobrze.
  • Problemy ze zgodnością – różne architektury procesorów mogą przechowywać bajty w innej kolejności (problem tzw. endianness albo „NUXI”).
  • Zysk nie zawsze jest duży – zapis binarny daje przewagę głównie przy dużych liczbach. Dla małych wartości różnica jest minimalna, a tekst daje większą czytelność.

W praktyce często łatwiej i wygodniej jest używać plików tekstowych, a ewentualne problemy z rozmiarem rozwiązać kompresją.

Marshalling i unmarshalling

Czasem programy muszą przechować skomplikowane struktury danych – np. dokumenty z różnymi stylami, obrazami czy metadanymi. Proces zapisania takich danych do pliku nazywa się marshallingiem, a ich ponowne odtworzenie – unmarshallingiem.

Proste edytory (jak Notepad czy nano) nie potrzebują takich mechanizmów, bo zapisują czysty tekst. Ale już np. MS Word musi zapisywać tekst razem z całą „otoczką” w jednym pliku.

Co ciekawe, marshalling może wykorzystywać zarówno zapis tekstowy, jak i binarny – to kwestia wyboru formatu.

Gdzie binarka faktycznie się przydaje?

Są jednak sytuacje, gdzie pliki binarne mają przewagę:

  • Grafika i multimedia – np. PNG czy MP3, gdzie liczy się efektywność i szybkość odczytu.
  • Oszczędność miejsca – szczególnie w dużych zbiorach danych.
  • Bezpieczeństwo i biznes – trudniej „rozgryźć” format binarny, więc bywa używany w zamkniętych rozwiązaniach komercyjnych.

Dobrze zaprojektowany format binarny (np. PNG) jasno określa porządek bajtów i długości pól, żeby uniknąć problemów ze zgodnością.

Tutaj dowiesz się więcej o formatach plików komputerowych. To jest bardzo ciekawy świat różnych pomysłow i tricków w świecie IT, gdzie spryt i wydajność to podstawowe zasady projektowania rozwiązań ;-).

Podsumowując: pliki binarne to wydajny sposób przechowywania danych, ale tekstowe formaty są wygodniejsze w pracy i łatwiejsze do analizy w świecie Linuxa. Dlatego w praktyce oba podejścia mają swoje miejsce – i warto wiedzieć, kiedy sięgnąć po które.

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.