【发布时间】:2021-07-18 03:23:21
【问题描述】:
我正在读取通过网络上传的文件,它通过 http 发送,我们通过 BufferedInputStream 接收。有时我们在从流中读取的过程中会遇到超时异常。我的工作理论是,在我们处理整个文件之前,连接已从客户端关闭。文件的顺序是mb。
这个理论有意义吗?客户端是否需要保持连接打开,以便服务器从输入流中完全读取字节?
【问题讨论】:
-
如果客户端关闭,或者更确切地说,如果它半关闭上传方向,您的读取将获得 EOF,这取决于您使用的方法通常会返回一个特殊值(例如
read(byte[])返回 - 1,readLine()返回 null) 但可能会抛出 EOFException,而不是 TimeoutException。因此,这不是您的情况。超时意味着客户端没有发送所有数据,或者它正在发送或网络在您设置的超时时间内传输数据太慢。关闭不会导致数据丢失; 中止可以,但在现代网络中不太可能。 -
您能否使用您收到的确切错误消息(异常跟踪)以及您用于发送和接收文件的代码来更新问题?无论如何,服务器读取的超时将与连接的服务器端的超时设置有关,并且在数据流停止但连接仍然打开时触发。可能是客户端速度慢或在上传过程中失去网络访问权限