Ce n'est presque certainement des raisons de performances. Imaginez, par exemple, un analyseur qui passe par un 500k ByteBuffer contenant des chaînes de caractères.
Il y a 3 approches à la restitution de la chaîne de contenu:
1. Construire une Chaîne de caractères[] au moment de l'analyse, un caractère à la fois. Cela va prendre un certain temps. Nous pouvons utiliser == au lieu de .est égal à comparer cache références.
Construire un int[] avec des décalages au moment de l'analyse, puis de générer dynamiquement Chaîne lors d'un get() qui se passe. Chaque Chaîne sera un nouvel objet, donc pas de mise en cache les valeurs de retour et l'utilisation de ==
Construire un CharSequence[] au moment de l'analyse. Depuis aucune nouvelle donnée n'est stockée (autres que les décalages dans le tampon d'octets), l'analyse est beaucoup plus faible que le #1. Dans le temps, nous n'avons pas besoin de construire une Chaîne, afin d'obtenir le rendement est égal à #1 (beaucoup mieux que le #2), comme nous ne sommes que de retourner une référence à un objet existant.
Outre le traitement des gains que vous obtenez en utilisant CharSequence, vous avez également de réduire l'empreinte mémoire par pas de duplication des données. Par exemple, si vous avez un tampon contenant 3 paragraphes de texte, et que vous voulez retourner tous les 3 ou un seul paragraphe, vous avez besoin de 4 Cordes pour représenter cette. À l'aide de CharSequence vous avez seulement besoin de 1 tampon avec les données, et 4 cas d'un CharSequence de mise en œuvre qui suit le début et la durée.
Phil Lello