java imageio 使用_java – 使用ImageIO发送图像流?

我有一个ServerSocket和一个Socket设置,所以ServerSocket使用ImageIO.write(….)发送图像流,Socket尝试读取它们并用它们更新JFrame.所以我想知道ImageIO是否可以检测到图像的结束. (我完全不了解JPEG格式,所以我测试了它)

显然不是.

在服务器端,我通过循环使用ImageIO.write(…)连续发送图像,其间有一些睡眠.在客户端,ImageIO读取第一个图像没问题,但在下一个图像上它返回null.这令人困惑.我期待它要么阻止阅读第一张图像(因为它认为下一张图像仍然是同一张图像的一部分),要么成功阅读所有这些图像(因为它有效).到底是怎么回事?它看起来像ImageIO检测到第一个图像的结束,但不是第二个图像的结束. (顺便说一下,这些图像大致相似)是否有一种简单的方法可以像这样流式传输图像,或者我是否必须创建自己的机制,将字节读入缓冲区,直到达到指定的字节或序列为止字节,此时它从缓冲区读取图像?

这是我的服务器代码的有用部分:

while(true){

Socket sock=s.accept();

System.out.println("Connection");

OutputStream out=sock.getOutputStream();

while(!socket.isClosed()){

BufferedImage img=//get image

ImageIO.write(img,"jpg",out);

Thread.sleep(100);

}

System.out.println("Closed");

}

我的客户代码:

Socket s=new Socket(InetAddress.getByName("localhost"),1998);

InputStream in=s.getInputStream();

while(!s.isClosed()){

BufferedImage img=ImageIO.read(in);

if(img==null)//this is what happens on the SECOND image

else // do something useful with the image

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值