我一直在使用org.apache.commons.net.telnet
连接到控制流并将命令发送到摄像机。我发送数据流请求并打开一个新线程,该线程从相机的传感器扫描图像并将数据作为原始字节发送给我。我正在使用标准java.io内流和外流进行读取。我正在写文件的外流...。只是原始字节。但是,我陷入了一个无限循环,无法读取套接字发送的数据。 instream.read()
> -1使我呆在那里...我已经完成了instream.available() > 0
,但这通常会使图像变短(可以理解的是)。我什至尝试了各种和/或方法,但从未完全阅读过。
我已经在Wireshark中确认所有内容都正在传递到我的程序中,并且已经发送了FIN,但是由于某些原因,JAVA没有选择FIN并给了我-1。该文件的原始文件保持打开状态,并且我从未从传感器获得“完整”的图像扫描。 (我一直在手动杀死流并读取图像。最终目标是将此图像扔到标签中,并用于偶尔进行相机曝光更新的动态过程中。)
有什么方法可以检测FIN消息并告诉循环在instream.read()
之外杀死吗?
其他信息:Win 7(企业版),Netbeans IDE
最佳答案
instream.read() > -1
让我在那里
当然可以。它会丢弃一个字节,并且首先不是有效的测试。您的读取循环应如下所示:
int ch;
while ((ch = instream.read()) != -1)
{
// ... Cast ch to a byte and use it somehow ...
}
或这个:
int count;
byte[] buffer = new byte[8192];
while ((count = instream.read(buffer)) > 0)
{
// ...
// for example:
out.write(buffer, 0, count);
}