V tomto článku si ukážeme, jak lze v jazyce Java zapisovat binární data do souborů. Zapisovat budeme pomocí třídy DataOutputStream, která je právě k zápisu binárních dat určena. Tyto data bychom poté mohli číst objektem třídy DataInputStream, ale to si ukážeme až jindy.
Pokud chceme pracovat s těmito třídami, budeme muset importovat balíček tříd java.io.*.
import java.io.*;
Dále budeme potřebovat nějaký soubor, do kterého budeme moci zapisovat. Ten si můžeme vytvořit téměř jakkoliv, případně použít metodu, kterou jsem popsal v tomto článku. V našem příkladu budu pracovat se souborem, který má název "ukazka.bin" a sídlí ve stejné cestě, jako moje třída.
Když budeme tvořit instanci třídy DataOutputStream a budeme chtít zapisovat do nějakého souboru, budeme jí muset předat objekt třídy FileOutputStream. V našem případě by vytváření instance třídy DataOutputStream vypadalo takto.
DataOutputStream vstup = new DataOutputStream(new FileOutputStream("ukazka.bin"));
Na naši instanci vstup již můžeme volat metody. Metody, které slouží pro zápis do souboru se nazývají write***. Za hvězdičky se dodává datový typ(nejde přímo o datový typ, ale o název metody), který chceme zapsat. Chceme li tedy uložit nějaké celé číslo datového typu int, pak použijeme metodu writeInt. U zápisu reálného čísla typu double bychom použili metodu writeDouble. U textového řetězce bychom volali zase metodu writeChars. A tak dále.
Takto by již mohla vypadat metoda main, ve které bychom zapsali do našeho souboru celé číslo datového typu int 199 a textový řetězec "Binary World!".
public class Main {
public static void main(String[] args) throws IOException {
int cislo = 199;
String retezec = "Binary World!";
DataOutputStream vstup = new DataOutputStream(new FileOutputStream("ukazka.bin"));
vstup.writeInt(cislo);
vstup.writeChars(retezec);
vstup.close();
}
}
Myslím, že zde již není třeba nic komentovat. Možná jen, že je vhodné po všech zápisech uzavřít stream, který provádí zápis do souboru - pomocí metody close().
Pokud bychom otevřeli náš soubor v nějakém hexa editoru, viděli bychom následující.
Jak je vidět na obrázku, tak první 4 bajty (32 bitů) obsazuje naše celé číslo typu int s hodnotou 199. První tři bajty jsou prázdné, protože takto malé číslo se dá zapsat pomocí jednoho bajtu. Zabrali jsme ovšem 4 bajty, protože naše číslo bylo deklarováno jako int, který v paměti rezervuje a užívá 32 bitů. Poslední bajt reprezentující naše číslo má v hexa zápisu hodnotu C7, což po převedení do desítkové soustavy je právě našich 199. Ostatní bajty obsahují znaky našeho řetězce "Binary World!".

