Quels sont des exemples d'applications pour un ByteBuffer
en Java? Veuillez énumérer tous les exemples de scénarios où cela est utilisé. Je vous remercie!
java
buffer
bytebuffer
Aklin
la source
la source
Réponses:
Il s'agit d'une bonne description de ses utilisations et de ses lacunes. Vous l'utilisez essentiellement chaque fois que vous devez effectuer des E / S rapides de bas niveau. Si vous deviez implémenter un protocole TCP / IP ou si vous écriviez une base de données (SGBD), cette classe serait utile.
la source
La classe ByteBuffer est importante car elle constitue une base pour l'utilisation des canaux en Java. La classe ByteBuffer définit six catégories d'opérations sur les tampons d'octets, comme indiqué dans la documentation Java 7 :
Example code : Putting Bytes into a buffer.
la source
Java IO utilisant des API orientées flux est effectué en utilisant un tampon comme stockage temporaire des données dans l'espace utilisateur. Les données lues sur le disque par DMA sont d'abord copiées dans des tampons dans l'espace noyau, qui sont ensuite transférées dans un tampon dans l'espace utilisateur. Il y a donc des frais généraux. L'éviter peut entraîner un gain de performances considérable.
Nous pourrions ignorer ce tampon temporaire dans l'espace utilisateur, s'il y avait un moyen d'accéder directement au tampon dans l'espace noyau. Java NIO offre un moyen de le faire.
ByteBuffer
est parmi plusieurs tampons fournis par Java NIO. C'est juste un conteneur ou un réservoir pour lire ou écrire des données. Le comportement ci-dessus est obtenu en allouant un tampon direct à l'aide de l'allocateDirect()
API sur le tampon.La documentation Java de Byte Buffer contient des informations utiles.
la source
Dans Android, vous pouvez créer un tampon partagé entre C ++ et Java (avec la méthode directAlloc) et le manipuler des deux côtés.
la source
Voici un excellent article expliquant les avantages de ByteBuffer. Voici les points clés de l'article:
Les avantages suivants sont spécifiques à ByteBuffer / MappedByteBuffer. Notez que les tampons directs sont créés en dehors du tas:
Insensible aux cycles gc : les tampons directs ne seront pas déplacés pendant les cycles de récupération de place car ils résident en dehors du tas. La technologie de mise en cache BigMemory de TerraCota semble s'appuyer fortement sur cet avantage. S'ils étaient sur le tas, cela ralentirait les temps de pause gc.
Amélioration des performances : dans le flux d'E / S, les appels en lecture impliqueraient des appels système, qui nécessitent un changement de contexte entre l'utilisateur et le mode noyau et vice versa, ce qui serait coûteux, surtout si le fichier est constamment consulté. Cependant, avec le mappage de mémoire, ce changement de contexte est réduit car les données sont plus susceptibles d'être trouvées en mémoire (MappedByteBuffer). Si les données sont disponibles en mémoire, elles sont accessibles directement sans invoquer le système d'exploitation, c'est-à-dire sans changement de contexte.
Notez que MappedByteBuffers sont très utiles, surtout si les fichiers sont volumineux et que quelques groupes de blocs sont consultés plus fréquemment.
la source