Quelqu'un pourrait-il m'expliquer les utilisations de l'utilisation des tampons, et peut-être quelques exemples simples (documentés) d'un tampon en cours d'utilisation. Merci. Je manque beaucoup de connaissances dans ce domaine de la programmation Java, alors pardonnez-moi si j'ai posé la mauvaise question. : sBuffers et octets?
Répondre
Un tampon est un espace dans la mémoire où les données sont stockées temporairement avant qu'elle ne soit traitée. Voir Wiki article
Voici un simple Java example sur l'utilisation de la classe ByteBuffer.
Mise à jour
public static void main(String[] args) throws IOException
{
// reads in bytes from a file (args[0]) into input stream (inFile)
FileInputStream inFile = new FileInputStream(args[0]);
// creates an output stream (outFile) to write bytes to.
FileOutputStream outFile = new FileOutputStream(args[1]);
// get the unique channel object of the input file
FileChannel inChannel = inFile.getChannel();
// get the unique channel object of the output file.
FileChannel outChannel = outFile.getChannel();
/* create a new byte buffer and pre-allocate 1MB of space in memory
and continue to read 1mb of data from the file into the buffer until
the entire file has been read. */
for (ByteBuffer buffer = ByteBuffer.allocate(1024*1024); inChannel.read(buffer) != 1; buffer.clear())
{
// set the starting position of the buffer to be the current position (1Mb of data in from the last position)
buffer.flip();
// write the data from the buffer into the output stream
while (buffer.hasRemaining()) outChannel.write(buffer);
}
// close the file streams.
inChannel.close();
outChannel.close();
}
espoir qui efface les choses un peu.
Peut-être pourriez-vous copier ce simple code et documenter chaque ligne? – Rifk
Merci de documenter, aide vraiment! – Rifk
+1 pour documenter ce morceau de code laid. Regardez juste cette boucle! La gestion des exceptions (pas de garantie que les canaux sont fermés après)! Je prends cela comme exemple pour apprendre à mon équipe à livrer du code propre. –
Avec un tampon, les gens signifient généralement un certain bloc de mémoire pour stocker temporairement certaines données. Une utilisation principale pour les tampons est dans les opérations d'E/S.
Un périphérique comme un disque dur permet de lire ou d'écrire rapidement un bloc de bits consécutifs sur le disque en une seule fois. La lecture d'une grande quantité de données peut être effectuée très rapidement si vous dites au disque dur "lisez ces 10 000 octets et mettez-les en mémoire ici". Si vous programmez une boucle et obtenez les octets un par un, en disant au disque dur d'avoir un octet à chaque fois, cela va être très inefficace et lent.
Donc, vous créez un tampon de 10 000 octets, dites au disque dur de lire tous les octets en une fois, puis vous traitez ces 10 000 octets un par un à partir du tampon en mémoire.
La section des tutoriels Sun Java sur E/S couvre ce sujet:
http://java.sun.com/docs/books/tutorial/essential/io/index.html
- 1. java.nio channels buffers streams terminologie
- 2. Protocol Buffers Java RPC Stack
- 3. Comportement inattendu des buffers de clôture MiniBufExplorer et NERD_Tree
- 4. Comment compter le nombre de buffers/fichiers ouverts dans Emacs?
- 5. Octets en Java?
- 6. Bon moyen de convertir entre court et octets?
- 7. jeu d'instructions JVM cycles CPU et la taille des octets
- 8. Convertir des octets en bits
- 9. converti à Int octets (NSString)
- 10. Cryptage DES de 8 octets en texte brut résultats dans le tableau de 16 octets
- 11. Malloc de 2 octets donne des problèmes
- 12. Pourquoi TADOBlobField.Savetofile n'écrit que 8 octets
- 13. Pourquoi Guid.ToString() inverse l'ordre des octets?
- 14. sql server 4 octets unsigned int
- 15. Comptage des octets envoyés/reçus via HTTP
- 16. Comment visualiser les octets avec C/C++
- 17. Java cipher.doFinal() écrit des octets supplémentaires
- 18. C#: Bitmap Création en octets tableau
- 19. Comment faire pour convertir NSString en octets
- 20. OR-octets en C# donne int
- 21. Clé primaire MySql> 900/1000 octets?
- 22. Fonctions de chaînes multi-octets PHP
- 23. serialport.Write() - comment formater les octets correctement
- 24. sun.misc.Unsafe: Comment obtenir les octets d'une adresse
- 25. 3 octets UTF-8 Chaîne de remplacement en .NET (Convertir 3 octets UTF-8 en chaîne ou Char)
- 26. Suggestions de lecture pour BITS/Octets et exemple de code pour effectuer des opérations, etc
- 27. Détermination de la plage de début et de fin des octets modifiés dans un fichier
- 28. Obtenir les octets cumulatifs envoyés et reçus à partir d'une carte réseau
- 29. Pourquoi une mémoire adressable par octet et pas une mémoire adressable sur 4 octets?
- 30. Losing octets sur un socket non bloquant contrôle epoll lorsque l'autre côté écrit et ferme
Je pense que vous devez être plus précis. Jusqu'à présent, cela ne semble pas être spécifique à Java - sauf si vous faites référence à java.nio.ByteBuffer? Qu'est-ce que vous essayez précisément de faire, et quel problème avez-vous rencontré? –