2012-02-06 288 views
1

我想要制作一个服务器,通过Java中的newtork接收JPG图像。ImageIO何时应该停止从InputStream读取?

isr = socket.getInputStream(); 
BufferedImage img = ImageIO.read(isr); 

我想完成阅读,但保持套接字连接。 ImageIO仅在关闭连接时停止。当我发送两次相同的图像时,它也会停止。

+0

请重新提问。我不明白这个问题 – Adrian 2012-02-06 21:53:56

+0

我想保持连接。 – 2012-02-06 22:17:57

回答

-1

ImageIO.read应该继续从输入流读取,直到它具有整个文件,此时它将停止读取。然后调用者有责任在输入流上调用close。

您不会将任何数据从客户端发送到服务器,告诉它您已完成阅读。只需关闭连接。

如果服务器发送两次相同的图像,或发送两个不同的图像,则必须建立两个套接字连接,或使用其他方法读取数据。据我所知,ImageIO.read无法读取两张图像。

+0

错误。 ImageIO创建InputStream来读取图像。它管理缓存等,并关闭inputStream。调用者无法关闭输入流。 – llappall 2012-02-09 20:55:33

+0

@llappall我正在谈论ImageIO.read(InputStream),这是OP在问题中引用的函数。它不创建InputStream:它作为参数传入。并且引用Java文档,“在读取操作完成后,此方法不会关闭提供的InputStream;如果需要,调用者有责任关闭流。”也许你在想如果ImageIO.read(URL)。我想我应该澄清我所指的函数名的哪些重载版本,但有时你必须阅读这个问题才能理解答案。 – Jay 2012-02-10 22:10:13

+0

呵呵,从这个问题看来ImageIO.read(URL)在这种情况下不起作用。他没有一个URL开始 - 他有一个插座。问题中没有指定插槽的位置。 – Jay 2012-02-10 22:13:38