作者tkcn (小安)
看板java
标题Re: [问题] ObjectOutputStream + ImageIO 出现的问题
时间Thu Dec 31 11:16:48 2009
: ◆ From: 220.132.160.117
: ※ 编辑: tkcn 来自: 220.132.160.117 (12/30 22:21)
: → tkcn:code 更新了,刚刚建立 Stream 的顺序错误,会导致 deadlock 12/30 22:22
: 推 ogamenewbie:ImageIO.read(in)改成(BufferedImage)in.readObject() 12/31 08:32
: → ogamenewbie:试试看? 12/31 08:33
: → tkcn:BufferedImage 应该不能 Serialize 吧? 12/31 08:48
: 推 ogamenewbie:我试试看弄个 class imp ser 存ImageIO write的byte[] 12/31 09:58
: 推 ogamenewbie:http://paste.plurk.com/show/121974/ 试试看? 12/31 10:37
: → ogamenewbie:先说好, 所有意外状况全部都没有预防... 12/31 10:38
: → tkcn:这支可以 work, 感谢。 不过还是很好奇为什麽原本的会有问题 12/31 10:46
看了一下 ImageIO.write(OutputStream) 的 source,
这方法会自动产生 ImageOutputStream,
所以真正送出去的 Stream 就变成:
ImageOutputStream -> ObjectOutputStream -> SocketOutputStream
我猜测可能是因为 ImageOutputStream 和 ObjectOutputStream 都有自己的 header,
当第二次在 ObjectOutputStream 上建立 ImageOutputStream 时,
就会写入那多余的 16-byte。
这样也可以说明为什麽不用 ObjectOutputStream 就不会有问题。
---
我刚刚在测试的时候也有试过利用 ByteArrayOutputStream,
不过没有额外包成一个 class,结果还是失败。
也有试过直接把 png file 的 data 丢进 ObjectOutputStream,
( png file 当初也是用 ImageIO.write() 写入的,并且我也在接收方检查过 header )
结果接收方还是没办法用 ImageIO.read() 接下来。
( javax.imageio.IIOException: Unknown row filter type )
可能要晚点再继续做测试了。 (用跨年夜测 = =)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.183.199
※ 编辑: tkcn 来自: 140.122.183.199 (12/31 11:20)
1F:推 ogamenewbie:Object 的是有 header 12/31 12:00
2F:推 sbrhsieh:tkcn 目前的做法即使不使用 ObjectIOStream 直接使用 12/31 16:42
3F:→ sbrhsieh:SocketStream 应该也是会有不正确作动吧。 12/31 16:50
4F:→ tkcn:刚刚测试过了,如 sbrhsieh 所说,确实有问题 12/31 17:06
5F:推 Maisky:BufferedImage不是Serializable,传不对不奇怪啊 01/01 08:36
6F:→ tkcn:呃,是用 ImageIO 送的,跟 Serializable 无关 01/01 11:19
7F:推 Maisky:就是因为不是serializable所以不保证送的对啊 01/01 22:02