Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-从inputstream读取时卡住_Java_Sockets_Inputstream - Fatal编程技术网

Java-从inputstream读取时卡住

Java-从inputstream读取时卡住,java,sockets,inputstream,Java,Sockets,Inputstream,您好,我目前正在处理套接字和输入/输出流。我用循环发送字节时遇到了一个奇怪的问题。由于某种原因,当它试图在应该停止时从inputstream读取时,它会被卡住。有人知道怎么了吗 int bit; final byte[] request = new byte[1024]; if (response instanceof InputStream) { while ((bit = response.read(request)) >

您好,我目前正在处理套接字和输入/输出流。我用循环发送字节时遇到了一个奇怪的问题。由于某种原因,当它试图在应该停止时从inputstream读取时,它会被卡住。有人知道怎么了吗

     int bit;
     final byte[] request = new byte[1024];

     if (response instanceof InputStream)
     {   
         while ((bit = response.read(request)) > 0) { // <-- Stuck here
             incoming.getOutputStream().write(request,0,bit);
             incoming.getOutputStream().flush();
         }
     }   
     incoming.close();
int位;
最终字节[]请求=新字节[1024];
if(InputStream的响应实例)
{   

而((bit=response.read(request))>0){/InputStream.read阻塞,直到输入数据可用为止,检测到文件结尾或引发异常


在输入数据可用、检测到文件结尾或引发异常之前,您不会捕获异常,也不会检查EOF。

InputStream.read块


您不会捕获异常,也不会检查EOF。

我过去所做的让每一面都打开的操作是在每条消息的末尾添加一个您不希望在消息中看到的终止字符。如果您自己构建消息,则可以使用字符,如
或双管道或s有些事情
| |
。然后检查接收端是否有该字符。这只是一种解决方法。不是解决方案。这在我的情况下是必要的,但可能不适用于您。

我过去所做的让每一方打开的事情是在每条消息的末尾添加一个您不希望在消息中看到的终止字符你可以自己编辑邮件,然后你可以使用一个字符,比如
,或者是双管或者其他什么
|
。然后在接收端检查该字符。只是一个解决方法。不是解决方案。这在我的情况下是必要的,但可能不适合你。

可能它被卡住了,因为它正在等待更多的数据。是吗流在另一端关闭了吗?你知道你需要多少数据吗?可能它被卡住了,因为它正在等待更多的数据。流在另一端关闭了吗?你知道你需要多少数据吗?我读了什么“-1”表示EOF,这就是我检查它是否大于0的原因。我做得不对吗?read尝试读取1024个字符,如果流中的字符较少,它会等待更多的字符。您可以查看
ByteArrayInputStream
DataInputStream
具体类。我可以查看ByteArray和数据。I不知道文件中有多少字节。好的,我做了一些变通,并设法添加了一些语句来查找EOF。感谢您的建议我读了“-1”表示EOF,这就是我检查它是否大于0的原因。我做得不对吗?read尝试读取1024个字符,如果流中的字符较少,它会等待更多的字符。您可以查看
ByteArrayInputStream
DataInputStream
具体类。我可以查看ByteArray和数据。I不知道文件中有多少字节。好的,我做了一些变通,并设法添加了一些语句来查找EOF。感谢您的建议。问题是它可以包含任何字符。您可以从发送方在文件开头添加一个长度编号,让接收方先读取长度,然后继续吗是否在读取指定长度之前读取其余部分?问题是它可以包含任何字符。您是否可以在文件的开头从发送方添加一个长度编号,让接收方先读取长度,然后继续读取其余部分,直到读取指定长度?