2017-01-06 1 views
1

Je crée une application Java qui utilise des flux d'entrée/sortie canalisés (avec une enveloppe de flux d'entrée/sortie d'objet autour d'eux). Je recevais un assez gros retard lors de l'envoi de données et je pensais que c'était à cause de la taille de mes données initialement. Cependant, la démonstration suivante montre le retard natif dans les flux d'entrée/sortie canalisés lors de la communication sur différents threads.Java Piped Input/Output Diffusion massive de retard dans la communication

public class Main{ 
public static long millis = 0; 

public static void main(String[] args) throws Exception { 
    JFrame frame = new JFrame(); 
    JButton button = new JButton("Press me"); 

    frame.getContentPane().add(button); 
    frame.setSize(new Dimension(500, 500)); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

    PipedInputStream pis = new PipedInputStream(); 
    PipedOutputStream pos = new PipedOutputStream(pis); 

    button.addActionListener(e -> { 
     try { 
      pos.write((int) (Math.random() * 1000)); 
      //records time the packet was sent 
      millis = System.currentTimeMillis(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    }); 

    while (true) { 
     System.out 
       .println("recieved: " + pis.read() + "\n\tin time (ms): " + (System.currentTimeMillis() - millis)); 
    } 

} 

}

Ce délai est généralement autour de 300-900 ms pour moi. C'est assez gros dans mon application. Je me demande pourquoi est-ce un gros retard? Et comment puis-je réparer mon code pour réduire le délai?

Merci d'avance.

+0

que diriez-vous chasse? –

+0

oh wow c'est une erreur stupide de ma part, merci pour ce hahaha. –

+0

Cela fonctionne maintenant, merci. –

Répondre