我有一个代码,我需要从设备中捕获一些信息。该设备有插座连接。基本上是这样的:
我发送一个命令,让它返回:
<some info>
<some info>
<some info>
<some info>
1.551
1.689
... (A bunch of those numbers)
1.258
<more info>
我需要一部分,但对我来说是垃圾。
Fisrt Attempt是:
read <somne info>
reached empty line?
start getting the points
reached the points total amount?
break the loop
这种工作。有时由于某种原因,我在套接字上做的下一次读取(发送命令并期待单行回答)给了我一些来自这个套接字读取的垃圾。不过有时候。
我试着这样做:
read <somne info>
reached empty line?
while !EOF
is number?
read
end
因此。这读了我需要的一切。但到达最后时给我一个IOException:红色超时
我知道没有什么可以阅读的,所以我怎么能避免这种情况呢?
对不起,我没有实际的代码,没有我,但基本上这是问题:在这个循环结束时获得读取超时的异常:
while((line = readLine()) != null){
//read stuff
}
答案 0 :(得分:0)
如果没有任何内容可供阅读,则对等方应该关闭连接。然后你会得到你的空,你可以结束你的结束。如果对等方没有这样做并且超时足够长以使您确信没有更多数据,则超时就是您的证据,您既不能也不想避免它。
答案 1 :(得分:0)
我找不到解决这个问题的简单方法。
我所做的是在读取块中插入try / catch块。所以,当我读完这些点时,我会去那个读取/捕捉块,直到EOF。由于没有EOF,它会抛出一个IOExcpetion(Read Timeout),我会忽略它。然后继续
我知道这不是最好的解决方案,但现在正在发挥作用。