Masz zamienić tekst (obiekt String) "0101111001100101" (16 znaków; w zależności od użytego kodowania od minimum 16 bajtów do 64 bajtów) na tablicę bajtów, w tym przypadku będzie to:
byte[] dane = new byte[] { 0x5e /* bity: 01011110 */, 0x65 /* bity: 01100101 */ };
Taka tablica jak widać zajmuje zaledwie 2 bajty, a jest w stanie dostarczyć dokładnie tych samych informacji.
Następnie przy odczycie z pliku *.bin, masz za zadanie zamienić taką tablicę bajtów na tekst.
Dwie funkcje podane przez @d3ut3r pozwolą Ci na konwersję pomiędzy pojedynczym bajtem, a tekstem. Jeżeli zaś chodzi o sam odczyt i zapis danych do pliku, możesz skorzystać z DataInputStreama oraz DataOutputStreama.
PS. W przypadku gdyby istniała możliwość, że ciąg wejściowy (tekst złożony ze znaków zera i jedynki) ma długość niepodzielną przez 8 musiałbyś na początku swojego pliku *.bin zapisać długość "zakodowanego" ciągu. Jest to konieczne, ponieważ dla przykładowego ciągu "00110", wynikiem będzie tablica złożona z zaledwie jednego elementu byte:
byte[] dane = new byte[] { 0x6 };
Jednak po zapisie do pliku, będziesz miał tam (tutaj podane są poszczególne
bity):
Kod
00000110
Ponieważ byte ma długość jednego bajtu, tj. 8 bitów.