CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA] problème de mémoire

Nirostreetlourd
Nirostreetlourd
Niveau 26
12 mars 2021 à 21:09:17

j'essaye actuellement de mettre à jour le corps d'un message qui est transporté au sein d'une route camel (via talend).

Jusqu'ici tout va bien, j'arrive à modifier ce message. Cependant si le fichier est trop volumineux la JVM passe en out of memory.

Comment reconstruire le message en sachant que celui-ci doit être modifié, mais uniquement certaines lignes ?

Par exemple je dois changer la ligne A, mais garder les lignes B et C intactes, et ainsi reconstruire mon message.

En sachant que camel ne fournit pas de updateBody() par exemple et le setOut body me récree un nouveau message.


InputStream inputStream = exchange.getIn().getBody(InputStream.class);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 
 
String line = reader.readLine();
String columnToForceToZero = String.valueOf(exchange.getProperty("targetColumn"));
String lineToChange = String.valueOf(exchange.getProperty("targetLine"));
//String Separator = String.valueOf(exchange.getProperty("separator"));
List<String> listColumn = new ArrayList<String>(Arrays.asList(columnToForceToZero.split(",")));
 
int lengthLineToChange = lineToChange.length();
//String newBody = exchange.getIn().getBody(String.class);
String nouveauBody="";
 
 
while( line != null) { 
    if (lineToChange.equals(line.substring(0,lengthLineToChange))){
        List<String> list = new ArrayList<String>(Arrays.asList(line.split("\\|")));
        for (int i = 0; i < listColumn.size() ; i++) {
                list.set(Integer.parseInt(listColumn.get(i)), context.work_YODA_IN_value_to_force);
        }
 
        line = String.join("|", list);
 
    }
 
    nouveauBody = nouveauBody + line +"\n";
    line = reader.readLine();   
}
 
exchange.getOut().setBody(nouveauBody);
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
//copy attachements from IN to OUT to propagate them
exchange.getOut().setAttachments(exchange.getIn().getAttachments());

godrik
godrik
Niveau 30
12 mars 2021 à 23:33:23

Je ne sais pas ce que c'est que l'objet exchange.getout, mais est ce qu'il y a une api qui te permet de passer le body bout par bout au lieux de tout mettre d'un coup?

Bunyan
Bunyan
Niveau 17
13 mars 2021 à 20:54:56

+1 pour godrik.
Sinon, y'a toujours le classique "augmenter la taille de la mémoire dispo pour ta JVM".

godrik
godrik
Niveau 30
13 mars 2021 à 23:38:45

Sinon, y'a toujours le classique "augmenter la taille de la mémoire dispo pour ta JVM".

Ca peut en effet etre une solution intermediaire pour te donner le temps de trouver comment faire ca bien.

Bunyan
Bunyan
Niveau 17
14 mars 2021 à 08:40:34

C'est malheureusement (d'expérience) ce qui est le plus souvent privilégié car "ça coûte moins cher de rajouter de la puissance à la machine et de laisser courir que de payer un expert à comprendre ce qu'il se passe ou de faire analyser ça par un développeur interne" -_-

Nirostreetlourd
Nirostreetlourd
Niveau 26
14 mars 2021 à 22:22:22

Hum le problème c'est que je pense pas qu'ils me fileront plus de place, j'ai tenté de splitté le fichier que je reçois en plusieurs fichier, je demanderais demain au tech lead !

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment