Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Java/C++]Zapis bitów do pliku, Zapisywanie bitów do pliku
MateuszS
post 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
Go to the top of the page
+Quote Post
d3ut3r
post 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!
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post
Crozin
post 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.
Go to the top of the page
+Quote Post
d3ut3r
post 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 smile.gif



--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
MateuszS
post 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ę smile.gif 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 biggrin.gif Dzięki i pzdr.

Ten post edytował MateuszS 13.11.2012, 18:49:09


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Crozin
post 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:
  1. 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:
  1. 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.

Ten post edytował Crozin 13.11.2012, 19:40:03
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post
Crozin
post 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%)
-----


http://ideone.com/OAgaDU
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post
Crozin
post 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"
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post
Crozin
post 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.
Go to the top of the page
+Quote Post
MateuszS
post 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. smile.gif Nie do końca działa jak miało działać ale już po wszystkim. Dzięki


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 04:40