2009-08-28 7 views
0

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?

+0

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é? –

Répondre

2

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.

+0

Peut-être pourriez-vous copier ce simple code et documenter chaque ligne? – Rifk

+0

Merci de documenter, aide vraiment! – Rifk

+0

+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. –

1

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.

Questions connexes