我正在从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 ???
答案 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
始终返回某些内容,请继续使用新收到的数据。