String -> byte[], byte[] -> String

0

Jak najlepiej i najefektywniej przekonwertować string na byte[] i byte[] na string? Jak na razie robiłem po 'chłopsku':

String -> byte[]

String dupa = ""12345678abłc"";
char a[] = dupa.toCharArray();
byte bajty[] = new byte[dupa.length()];
for(int i = 0; i < dupa.length(); i++)
     bajty[i] = (byte)a[i];

Dochodzi jeszcze problem jak przekonwertować bezstratnie w obie strony polskie znaki(np. ł teraz przechodzi w B). Jak ustawić kodowanie? Proszę o pomoc.

0

A metodę getBytes sprawdzałeś?

0

Weź pod uwagę, że Java przechowuje znaki w formacie UTF-16, a bardzo często w mailach i na stronach Web wymagane jest kodowanie UTF-8. W tym pierwszym wypadku każdy znak ma zawsze 2 bajty (lub 4), a w tym drugim 1, 2 lub więcej. W UTF-8 nie można założyć, że jeden znak = jeden bajt, ani nawet 1 znak = 2 bajty. Samodzielne przekodowywanie znaków to w Javie wyważanie otwartych drzwi. Wystarczy trochę poczytać javadoc lub dowolny podręcznik do Javy zawierający kwestie związane z lokalizacją/krajem.

0

dzieki bardzo za pomoc:) z kodowaniem tez się udało. Teraz mam problem troszke innej natury. Skąd mam wiedzieć ile mam przydzielić pamięci na tablice bajtów otrzymaną ze strumienia, aby móc ją potem przekonwertować na String? Jeśli na sztywno dam tablicę 1000 bajtow, a przyjdzie mi 100 to potem powstanie string z 1000 bajtow, z czego 100 to sa tylko przydatne informacje, a reszta to krzaki. Jak to przerobić?

byte bajtyTest[] = new byte[10000];
InputStream is = client.getInputStream();
is.read(bajtyTest);
0

ObjectInputStrem, BufferedReader, InputStreamReader...

A co do Twojego pytania: http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html#read%28byte[]%29 (dokumentacja nie boli...)

0

dzieki, wszystkie problemy rozwiazane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1