2017-01-06 5 views
1

パイプ入出力ストリームを使用するJavaアプリケーションを作成しています(その周囲にオブジェクト入出力ストリームラッパーがあります)。私はデータを送信するときにかなりの遅延を得ていました、そして、それは私のデータのサイズが最初であったためだと思いました。ただし、次のデモンストレーションでは、異なるスレッドで通信するときのパイプ入出力ストリームのネイティブ遅延を示しています。Java Piped入出力ストリーム通信の大規模な遅延

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)); 
    } 

} 

}

この遅延は、通常、私のために周りに300〜900ミリ秒です。これは私のアプリケーションではかなり大きいです。なぜ私はこの大きな遅れがあるのだろうと思っていますか?遅延を減らすためにコードを修正するにはどうすればよいですか?

ありがとうございます。

+0

を参照してください? –

+0

ああ、それは私の部分で愚かな間違いです、そのhahahaのおかげで。 –

+0

これは今動作します、ありがとうございます。 –

答えて

関連する問題