读取流数据的最佳编程方式

时间:2013-10-23 01:36:08

标签: java streaming

我正在从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());
  }

建议plz ???

2 个答案:

答案 0 :(得分:0)

  

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

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

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

或者

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

其中'c'是'int'。

  

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

为什么不呢?

答案 1 :(得分: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循环当然只接受布尔参数(true / false)。因此,在伪代码中,如果InputStream始终返回某些内容,请继续使用新收到的数据。