Qu'est-ce que l'utilisation de ByteBuffer en Java?
Quels sont des exemples d'applications pour un ByteBuffer
en Java? Veuillez énumérer les exemples de scénarios dans lesquels il est utilisé. Merci!!!!
- Apache Hadoop est la compression zlib codec par exemple) utilise ByteBuffer de jave.nio.
Vous devez vous connecter pour publier un commentaire.
Cette est une bonne description de ses utilisations et des lacunes. Vous essentiellement l'utiliser chaque fois que vous devez faire, rapide à faible niveau I/O. Si vous alliez mettre en œuvre un protocole TCP/IP ou si vous écrivez une base de données (SGBD) cette classe seraient utiles.
La ByteBuffer classe est important, car il constitue une base pour l'utilisation des canaux en Java. ByteBuffer classe définit six catégories d'opérations lors de l'octet tampons, comme indiqué dans la documentation de Java 7:
Example code : Putting Bytes into a buffer.
Java IO à l'aide de flux orienté Api est effectuée à l'aide d'un tampon pour le stockage temporaire de données au sein de l'espace utilisateur. Les données lues à partir du disque de DMA est d'abord copié à des tampons dans l'espace noyau, qui est ensuite transfert à la mémoire tampon dans l'espace utilisateur. Il y a donc une surcharge. Éviter qu'il peut obtenir gain considérable des performances.
Nous ne pouvait ignorer ce tampon temporaire dans l'espace utilisateur, si il y avait un moyen directement accès à la mémoire tampon dans l'espace du noyau. Java NIO fournit un moyen de le faire.
ByteBuffer
est parmi plusieurs tampons fournis par Java NIO. C'est juste un récipient ou cuve de stockage pour les données de lecture ou d'écriture des données. Au-dessus de comportement est obtenu par l'affectation directe de la mémoire tampon à l'aide deallocateDirect()
API de la mémoire Tampon.La Documentation Java des Octets de la mémoire Tampon contient des informations utiles.
Dans Android, vous pouvez créer une zone tampon entre C++ et Java (avec directAlloc méthode) et le manipuler dans les deux côtés.
Ici est un excellent article expliquant ByteBuffer avantages. Suivantes sont les points clés de l'article:
Sont les avantages spécifiquement pour direct ByteBuffer/MappedByteBuffer. Notez que direct tampons sont créés à l'extérieur du tas:
Pas affectée par gc cycles: Direct tampons ne sont pas déplacés lors de la collecte des ordures cycles comme ils résident à l'extérieur du tas. Carrières d'ocre de BigMemory technologie de mise en cache semble miser sur cet avantage. Si ils étaient sur le tas, il serait de ralentir gc temps de pause.
Boost de Performance: Dans les cours d'IO, lire les appels entraînerait des appels système, qui nécessitent un contexte-pour basculer entre le mode utilisateur au mode noyau et vice-versa, ce qui serait coûteux, surtout si le fichier est accessible en permanence. Cependant, avec la projection en mémoire cette commutation de contexte est réduite à mesure que les données sont plus susceptibles de se trouver dans la mémoire (MappedByteBuffer). Si les données sont disponibles dans la mémoire, il est accessible directement sans invoquer l'OS, c'est à dire, pas de commutation de contexte.
Noter que MappedByteBuffers sont très utiles surtout si les fichiers sont gros et peu de groupes de blocs sont plus consultés fréquemment.