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.