1

我正在从 TCP 流媒体软件读取流数据。我目前正在使用 while 循环连续读取。但我不确定这是否是读取流数据的最佳技术。

以下是我目前正在使用的代码:

  Socket client=new Socket("169.254.99.2",1234);
  System.out.println("Client connected ");

//getting the o/p stream of that connection
  PrintStream out=new PrintStream(client.getOutputStream());
  out.print("Hello from client\n");
  out.flush();

//reading the response using input stream
BufferedReader in= new BufferedReader(new InputStreamReader(client.getInputStream()));
  int a = 1;
  int b= 1;

//
  while(a==b){
       // I'm just printing it out.
       System.out.println("Response" + in.read());
  }

建议lz???

4

2 回答 2

0

该循环将与 相同while(true),它是连续的。另外,我建议在线程中运行它。

初始化套接字和流之后,我建议调用这样的方法:

Thread messageThread;

public void chatWithServer() {
    messageThread = new Thread(new Runnable() {
        public void run() {
            String serverInput;
            while((serverInput = in.readLine()) != null) {
                //do code here
            }
        }
    };

    messageThread.start();
}

我们把它放在一个线程中,这样循环就不会阻塞客户端的其余代码。(循环后不进行)

while循环在serverInput参数内初始化,因此每次循环时,它都会重新初始化serverInput,因此它不会一直循环使用第一个发送的数据。

你必须把它放在括号中,因为当然,while循环只接受布尔参数(真/假)。所以,在伪代码中,如果InputStream总是返回一些东西,继续接收新的数据。

于 2013-10-23T02:18:25.837 回答
0

我目前正在使用 while 循环连续读取。

这是读取流数据的最佳技术。但是,您的循环必须测试流的结束,这由 read() 在 Java 中重新调整 -1 发​​出信号。您的 'a==b' 测试毫无意义。有几种可能的循环测试:

while (true) // with a break when you detect EOS

或者

while ((c = in.read()) != -1)

其中'c'是一个'int'。

但我不确定这是否是读取流数据的最佳技术。

为什么不?

于 2013-10-23T02:13:16.957 回答