ilość zajmowanych w pliku bajtów przez String?

0

Jak pobrać ilość bajtów zajmowanych (powiedzmy, w pamięci) przez String?
Chodzi o to, że metoda length() String'a "sac" zwróci 3 - i dobrze
ale ta sama metoda ze Stringa "śąć" też zwróci 3 a mnie chodzi o to by zwróciła 6 (bo zakładam, że polskie znaki są kodowane dwoma bajtami),
przynajmniej tak mi program zapisuje metodą RandomAccessFile.writeUTF() Stringa do pliku, jeśli zapisuje stringa z polskimi znakami to mi plik "rośnie" bardziej (każdy polski krzak zajmuje 2 bajty) i potrzebuję wiedzieć ile bajtów w rzeczywistości trafi do pliku (bez głupawego zliczania IF'ami ilości polskich znaków i innych);
kombinowałem z poniższym kodem ale niestety on też mi zwraca wartość 3

String s = "śąć";
byte b[] = s.getBytes();
int i = b.length;
System.out.println("ilosc byte'ow: " + i);

kombinacja:
char b[] = s.toCharArray();
tym bardziej nie zadziała...

jeśli ktoś ma na to lekarstwo to poproszę o nie :]

0

RandomAccessFile.writeUTF()

wykorzystuje zmodyfikowany format UTF-8, w ktorym:

  • znaki z przedzialu 1-127 zajmuja 1 bajt
  • znak \u0000 oraz znaki z przedzialu 128-2047 zajmuja 2 bajty
  • znaki z przedzialu 2048 - 65535 zajmuje 3 bajty.

Na podstawie tego tego mozesz napisac prosta metoda narzedziowa, zliczajaca rozmiar stringu zapisanego do tego formatu.

0

jeśli ktoś nie zna jakiegoś konkretnego sposobu (przy pomocy paru gotowych metod) to...
korzystając ze sposobu zaproponowanego przez Luno będzie to wyglądało jakoś tak:

String s = "śąćsac";
char c[] = s.toCharArray();
int i = 0;

for(int x=0; x<c.length;x++){
	if(((int)c[x] > 0) && ((int)c[x] < 128)) i++;
	if((((int)c[x] > 127) && ((int)c[x] < 2048)) || (int)c[x] == 0) i+=2;
	if(((int)c[x] > 2047) && ((int)c[x] < 65536)) i+=3;
}
System.out.println("ilosc byte'ow: "+ i);

z paru testów wygląda, że to całkiem dobrze działa...

0

Odpowiedź na pytanie o długość Stringu zależy od kodowania.
Długość zwraca taka metoda: txt.getBytes("UTF-8").length;
(W razie potrzeby można zamienić UTF-8 na inny Charset
Pozdrawiam

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