IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème pagination lors d'une copie


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut Problème pagination lors d'une copie
    Bonjour,
    J'ai besoin de copier une grosse quantité de jar et j'ai créé un petit programme.

    Je rencontre le poblème suivant lorsqu'il essaye de copier certains jar par moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    java.io.IOException: Erreur lors d’une opération de pagination
    	at sun.nio.ch.FileDispatcher.write0(Native Method)
    	at sun.nio.ch.FileDispatcher.write(FileDispatcher.java:44)
    	at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
    	at sun.nio.ch.IOUtil.write(IOUtil.java:60)
    	at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:203)
    	at sun.nio.ch.FileChannelImpl.transferToTrustedChannel(FileChannelImpl.java:449)
    	at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:520)
    	at RetrieveAllJars.copyFile(RetrieveAllJars.java:31)
    Voici le code de copie trouvé dans la FAQ de ce forum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    private static void copyFile(final File source, final File dest) {
        FileChannel in = null; 
        FileChannel out = null;
     
        try {
          // Init
          in = new FileInputStream(source).getChannel();
          out = new FileOutputStream(dest).getChannel();
     
          // Copie depuis le in vers le out
          in.transferTo(0, in.size(), out);
        } catch (final Exception e) {
          e.printStackTrace(); // n'importe quelle exception
        } finally { // finalement on ferme
          if (in != null) {
            try {
              in.close();
            } catch (final IOException e) {
            }
          }
          if (out != null) {
            try {
              out.close();
            } catch (final IOException e) {
            }
          }
        }
      }
    Quelqu'un a t-il connaissance de ce problème? J'ai cherché sur internet pour ce type de problème avec transfertTo() mais n'ai pas trouvé de solution.

    Merci d'avance.
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  2. #2
    Membre averti
    Homme Profil pro
    Dev
    Inscrit en
    Novembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Novembre 2006
    Messages : 112
    Points : 350
    Points
    350
    Par défaut
    salut

    ton problème vient de l'appel de la methode transferTo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     in.transferTo(0, in.size(), out);
    la methode transfertTo a pour signature:
    abstract long transferTo(long position, long count, WritableByteChannel target)
    Transfers bytes from this channel's file to the given writable byte channel.
    Je pense que cela survient avec de gros fichiers.
    Dans ce code tu copie tout le fichier d'un coup mais tu peut faire plusieurs appel pour copier par morceau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int TAMPON=104*1024; // tu peux modifier cette valeur
    long n= in.size();
    long position=0;
    while( n>0)
    {
    long cout=TAMPON;
    if (n< TAMPON)
     cout=n;
    in.transferTo(position, count, out)
    position+=count;
    n-=count;
    }
    tu limitera le besoin de mémoire pour faire ta copie.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut
    Merci pour ta réponse. J'essaye demain et te tiendrais au courant ici . Les JARs ne dépassent pourtant pas les quelques Mo au maximum donc je ne pensais pas que cela pourrait être ca mais je vais tenter .
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Problème lors d'une copie de tableau
    Par Florian.R dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2010, 11h05
  2. [Toutes versions] Problème de saturation mémoire lors d'une copie de contact
    Par langkif dans le forum VBA Outlook
    Réponses: 3
    Dernier message: 25/08/2010, 10h08
  3. [XL-2007] Problème de décimales lors d'une copie
    Par Jay-P dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/04/2010, 00h33
  4. Problème Date de création lors d'une copie
    Par hybris95 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 13/01/2009, 10h30
  5. Problème lors d'une copie
    Par Swiper dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/08/2007, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo