Copie de fichier Java (modifier la taille du tampon)
En Java java.io.InputStream,,java.io.OutputStream à
Présentation d'un exemple de programme qui effectue un traitement de copie à l'aide de flux d'entrée/sortie.
Dans le traitement de copie utilisant des flux, même les fichiers volumineux peuvent être copiés relativement rapidement en augmentant la taille du tampon de lecture.
Dans l'exemple de programme, la taille du tampon de lecture des données peut être spécifiée avec un argument.
La zone tampon de lecture spécifiée est sécurisée dans le tas JavaVM, donc la rendre trop grande entraînera une mauvaise efficacité. Par conséquent, nous vérifierons également la taille efficace du tampon de lecture des données lors de la copie de fichiers.
exemple de programme
/**
* Écrit les données du flux d'entrée vers le flux de sortie.
*Le flux d'entrée/sortie sera fermé une fois le processus de copie terminé.
* @param dans le flux d'entrée
* @param os flux de sortie
* @param bufferSize Taille du tampon de lecture des données (Ko).
* @throws IOException Si une exception de traitement d'entrée/sortie se produit
*/
public static void copyStream (InputStream dans, OutputStream os,
int bufferSize) lance IOException {
int len = -1;
octet[] b = nouvel octet[bufferSize * 1024];
essayer {
while ((len = in.read(b, 0, b.length)) != -1) {
os.write(b, 0, len);
}
os.flush();
} enfin {
si (dans != null) {
essayer {
joindre();
} catch (IOException e) {
e.printStackTrace();
}
}
si (os != nul) {
essayer {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
exécution
Afin de copier l'exemple de fichier de programme, nous avons préparé un fichier de 100 Mo "100M.txt" directement sous le lecteur C. Dans l'exemple de programme, C:\100M.txt , lisez les données en unités de taille de tampon 1 000 Ko. C:\a.txt Copier.
L’exemple a été exécuté dans l’environnement suivant.
Système d'exploitation : Windows XP
Processeur : Athlon 1,46 GHz
Mémoire : 1 Go
JRE : 1.6.4
◆Exemple d'exécution
/** * Exemple d'exécution * @param args */ public static void main(String[] args) { try { copyStream("C:\\100M.txt", "C:\\a.txt",1000); } catch (IOException e) { e.printStackTrace(); } }
Modification de la taille du tampon
Pour vérifier la taille efficace du tampon de lecture des données lors de la copie de fichiers, utilisez le troisième argument de copyStream comme
Les résultats d'un traitement de copie similaire dans des unités de 1 Ko, 100 Ko, 1 000 Ko et 10 000 Ko sont résumés ci-dessous.
Bien que cela ne puisse pas être conclu à partir des seuls résultats ci-dessus, si vous spécifiez la taille du tampon de lecture des données en unités de 1 000 Ko,
Les résultats ont montré qu'il était efficace en termes d'utilisation du tas et de temps de traitement lors du traitement de la copie.
Des résultats similaires ont été obtenus même en augmentant la taille du fichier (environ 1 Go).
D'un autre côté, lors de la copie d'un petit fichier (environ 1 Mo ou moins), augmenter la taille du tampon sera un gaspillage, je pense donc qu'il est préférable de spécifier environ 100 Ko.
Utilisez FileChannel pour des vitesses plus rapides
java.io.InputStream,,java.io.OutputStream
Le traitement de la copie est important pour comprendre les flux d'entrée/sortie, mais
Nouvelles E/S introduites dans J2SE1.4 java.nio.channels.FileChannel#transferTo
En utilisant cette méthode, vous pouvez copier des fichiers encore plus efficacement.
Ensuite, je vais vous montrer comment copier facilement et rapidement des fichiers à l'aide de FileChannel.
⇒ Copie de fichier Java (facile et rapide)