J'ai une bibliothèque de classes, de travail avec mes données, ce qui est en cours de lecture dans la mémoire tampon. Est ce que c'est possible pour éviter la copie de tableaux de nouveau et de nouveau, passant de parties de données de plus en plus profond dans les méthodes de traitement? Eh bien, il semble étrange, mais dans mon cas particulier, il y a un spécial écrivain, qui divise les données en blocs et à l'écrit-les individuellement dans des endroits différents, de sorte qu'il effectue simplement le Système.arraycopy, obtient ce dont il a besoin et les appels de sous-jacents de l'écrivain, avec ce nouveau sous-tableau. Et cela se produit de nombreuses fois. Quelle est la meilleure approche pour refactoriser le code?
Réponses
Trop de publicités? Voici un exemple d'encapsulation utilisant java.nio.ByteBuffer
. Cela devrait être très proche de ce dont vous avez besoin. Au moins pour certaines opérations.
byte [] a2 = {0, 0, 1, 0};
ByteBuffer buf = ByteBuffer.wrap(a1,0,3);
Juste un avertissement, buf.array()
renvoie le tableau d'origine (backend) avec tous les éléments.
Vous pouvez adopter la même approche que la classe String
; créer une classe pour les objets immuables qui sont construits à partir d'un tableau, un décalage de début et un décalage de fin qui offre un accès au sous-tableau. L'utilisateur d'un tel objet n'a pas à connaître la distinction entre l'ensemble du tableau ou un sous-tableau. Le constructeur n'a pas à copier le tableau, il suffit de stocker la référence du tableau et ses limites.