[Java/C++]Zapis bitów do pliku, Zapisywanie bitów do pliku |
[Java/C++]Zapis bitów do pliku, Zapisywanie bitów do pliku |
12.11.2012, 18:11:37
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Witam, mam taki problem, bo muszę string "0101" itp. przekonwertować na bity (?) i zapisać do pliku .bin. Ponoć wtedy plik mniej zajmuje. Średnio wiem o co w tym biega i nie znalazłem w internecie wartościowych treści na ten temat. Chodzi mi głównie o teoretyczne wyjaśnienie zagadnienia - implementacją zajmę się sam. Po poprawnym zapisie do pliku mają w nim być "krzaki". Taki plik powinno się także dać z powrotem przekonwertować na ów string zero-jedynkowy lub przynajmniej na pojedyncze 1 lub 0. Będę wdzięczny za pomoc.
-------------------- O! Zimniok :P
|
|
|
12.11.2012, 18:25:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 709 Pomógł: 176 Dołączył: 24.10.2010 Ostrzeżenie: (0%) |
http://docs.oracle.com/javase/1.5.0/docs/a...va.lang.String)
http://docs.oracle.com/javase/1.5.0/docs/a...naryString(int) powinno pomóc. -------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
13.11.2012, 17:06:19
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Chyba niekoniecznie. Dalej zapisuje mi w postaci stringowej do pliku. 2 metody to by było za prosto chyba. Może plik trzeba jakoś binarnie otworzyć, nie wie wiem za bardzo. Powinny się w pliku krzaki pojawić a nadal mam String
-------------------- O! Zimniok :P
|
|
|
13.11.2012, 17:13:41
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Magicznej kuli nie mam - pokaż kod.
|
|
|
13.11.2012, 17:20:32
Post
#5
|
|
Grupa: Zarejestrowani Postów: 709 Pomógł: 176 Dołączył: 24.10.2010 Ostrzeżenie: (0%) |
Nie wiem na ile to jest aktualne w świetle najnowszej wersji Java
http://www.javapractices.com/topic/TopicAction.do?Id=245 generalnie hasło Java binary files zwraca sporo rezultatów, niestety bardziej pomocny nie będę Ostatni raz z Java miałem styczność jakiś czas temu na studiach -------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
13.11.2012, 18:48:40
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Rozumiem. Ja właśnie studiuję Niestety mamy Javę prowadzoną w sposób - "poczytajcie w internecie a na zajęciach was odpytam". Crozin, he tu nie chodzi o kod, kod tu nic nie da bo kodu nie ma. Chodzi bardziej o teoretyczny aspekt tego. No nic, jakoś się jutro wytłumaczę, dobrze że nie ja jeden Dzięki i pzdr.
Ten post edytował MateuszS 13.11.2012, 18:49:09 -------------------- O! Zimniok :P
|
|
|
13.11.2012, 19:35:43
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
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:
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: 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.
Ten post edytował Crozin 13.11.2012, 19:40:03 |
|
|
16.11.2012, 16:25:05
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Świetnie napisane, dzięki teraz wszystko rozumiem. Jakby co dam znać
Jeżeli mam String złożony z 8 elementów np. "10101010" (czyli dec 170), mogę go sobie przekonwertować jakoś na postać 0xC2,0xAA ? Bo tam w tablicę muszę to wpisać w takiej postaci prawda? -------------------- O! Zimniok :P
|
|
|
16.11.2012, 16:38:14
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
|
|
|
16.11.2012, 22:26:34
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Dzięki robiłem tak, tylko nie wiedziałem o co chodzi z tym Radixem jak nie dawałem tej 2
Hmm, zapisuje niestety tylko 7 znakowe stringi, czyli 7/8 miejsc zajętych, 1 bit się marnuje ale jest jakaś kompresja przynajmniej ;] -------------------- O! Zimniok :P
|
|
|
17.11.2012, 15:03:39
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Ah, rzeczywiście Byte.parseByte() będzie tutaj mało pomocne. Pogoogleaj za "java binary string to byte array"
|
|
|
17.11.2012, 19:18:08
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Nie no dobrze jest bo z pliku 4.5mb robi mi się 2 megowy i mogę go sobie kodować i dekodować na dane wyjściowe. Kompresja tego pliku jest na poziomie 50% więc nie jest źle, ludzie gorszą kompresję mieli. co prawda można by jakoś osiągnąć wyższą ale na moje potrzeby wystarczy.
-------------------- O! Zimniok :P
|
|
|
17.11.2012, 19:27:59
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Powinieneś uzyskać plik o 8-krotnie mniejszej objętości - pokaż kod.
|
|
|
2.12.2012, 22:51:10
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Sorki że nie odpisałem, już wszystko ok, tzn. zaliczone. Nie do końca działa jak miało działać ale już po wszystkim. Dzięki
-------------------- O! Zimniok :P
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.09.2024 - 06:42 |