Próbuję wyciąć tablicę bajtów, aby wyczyścić pierwszą część tablicy. Używam ByteBuffer, ale nie zachowuje się tak, jak bym się spodziewał.Krojenie tablic bajtowych w Javie
byte[] myArray = new byte[10];
ByteBuffer buf = ByteBuffer.wrap(myArray);
buf.position(5);
ByteBuffer slicedBuf = buf.slice();
byte[] newArray = slicedBuf.array();
Spodziewam się, że rozmiar newArray będzie 5, zawierający tylko ostatnią część mojego ByteBuffer. Zamiast tego zwracana jest pełna tablica bajtów. Rozumiem, że dzieje się tak dlatego, że "bufor zabezpieczający" jest taki sam przez cały czas.
Jak wyciąć, aby mieć tylko żądaną część tablicy?
EDIT: Dodano kontekst
Bajty są odbierane z sieci. Bufor jest utworzony w następujący sposób:
[ SHA1 hash ] [ data... lots of it ]
już posiada funkcję, której tablicy bajtów jako parametr i obliczenia mieszania SHA1. To, czego chcę, to wyciąć pełny bufor, aby przekazać tylko dane bez oczekiwanego skrótu.
Jeśli nie napisałeś funkcji haszowania, utkniesz, gdy masz wszystko w jednym bajcie [], jeśli chcesz uniknąć kopii. Dlaczego nie odczytać hasha z sieci do jednej tablicy, a dane do innej? –