Na przykład, powiedzmy, że chcę usunąć z tablicy wszystkie ciągłego segmenty 0 na dłużej niż 3 bajtyJava: usunąć continious segmentu zerami z tablicy bajtów
byte a[] = {1,2,3,0,1,2,3,0,0,0,0,4};
byte r[] = magic(a);
System.out.println(r);
wynik
{1,2,3,0,1,2,3,4}
I chcesz zrobić coś w stylu wyrażeń regularnych w Javie, ale w tablicy bajtów zamiast łańcucha znaków.
Czy jest coś, co może mi pomóc w wbudowaniu (lub czy istnieje dobre narzędzie innej firmy), czy też muszę pracować od zera?
Łańcuchy to UTF-16, więc konwersja tam iz powrotem nie jest dobrym pomysłem? Przynajmniej jest dużo zmarnowanego narzutów ... prawda?
Jak krytyczny jest wydajność i zużycie pamięci dla przypadku użycia? Ogólnie rzecz biorąc, pamięć RAM jest tania, a procesory są szybkie. Czy rzeczywiście znalazłeś wąskie gardło, czy może martwisz się o efektywność? Możesz go łatwo wypróbować, konwertując bajt [] na String za pomocą 8-bitowego kodowania, wykonaj swoje wyrównywanie i sprawdź wydajność. W końcu nie martwimy się, jak nieefektywne łańcuchy Java z 16-bitowymi znakami są używane do normalnego użytkowania w środowiskach ANSI, prawda? –
Jest to aplikacja o wysokiej wydajności, bardziej martwię się o cykle niż użycie ramek. – Mike
Nadal warto porównywać; maszyna wirtualna Hotspot zamieni kod w punktach aktywnych na kod maszynowy, który będzie obsługiwał dane 16-bitowe z taką samą szybkością, jak dane 8-bitowe, ponieważ wszystkie one pasują do 32-bitowego słowa maszynowego. Nawet jeśli okaże się, że jest zbyt wolny, nie poświęcisz wiele czasu na jego znalezienie. –