【问题标题】:When should ImageIO stop reading from InputStream?ImageIO 何时应该停止从 InputStream 读取?
【发布时间】:2012-02-06 21:50:52
【问题描述】:

我正在尝试使用 Java 制作一个通过 newtork 接收 JPG 图像的服务器。

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

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

【问题讨论】:

  • 请改写问题。我不明白这个问题
  • 我想保持连接。

标签: java inputstream javax.imageio


【解决方案1】:

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

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

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

【讨论】:

  • 错了。 ImageIO 创建 InputStream 以读取图像。它管理缓存等,并关闭 inputStream。调用者无法关闭输入流。
  • @llappall 我说的是 ImageIO.read(InputStream),OP 在问题中引用的函数。它不会创建 InputStream:它是作为参数传入的。并且引用 Java 文档,“在读取操作完成后,此方法不会关闭提供的 InputStream;如果需要,调用者有责任关闭流。”也许您正在考虑 ImageIO.read(URL)。我想我应该澄清一下我所指的函数名称的重载版本,但有时你必须阅读问题才能理解答案。
  • 哦,从问题看来 ImageIO.read(URL) 在这种情况下不起作用。他没有一个 URL 开头——他有一个套接字。问题中没有说明他在哪里得到了插座。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2010-11-19
  • 2017-08-23
  • 2012-03-03
  • 2010-12-20
相关资源
最近更新 更多