Re: [問題] ObjectOutputStream + ImageIO 出現的問題
※ 引述《Maisky (McDummy)》之銘言:
: 如果要用ObjectInputStream和ObjectOutputStream, 傳的object就應該要
: 是Serializable. 而BufferedImage不是Serializable,所以
: ImageIO.write(BufferedImage, "png", ObjectOutputStream)
並沒有說用 ObjectOutputStream 傳的 object 就必須 Serializable。
正確的說法應該是,
透過 writeObject() 傳出去的 object 才需要 Serializable。
ObjectOutputStream 用的是 Composition 的概念,
在他的內部其實是另一個 OutputStream,
當呼叫的 method 與 Object 的操作無關,
ObjectOutputStream 就會直接把呼叫轉給其內部的 OutputStream。
以 write(byte[]) 為例,source code 如下:
public void write(byte[] buf) throws IOException {
bout.write(buf, 0, buf.length, false);
}
// 其中 bout 就是 ObjectOutputStream 內部的 Stream
ImageIO 跟 ObjectOutputStream 的 source 都有點複雜,
所以接下來我就直接推理了。
如果你有看完這串所有的討論,
你應該會知道後來我們已經發現這個問題跟 ObjectOutputStream 無關,
即使是用 FileOutputStream 或 SocketOutputStream 也會有相同的問題,
並且我們已經找出問題並解決了。
如果如你所說,ImageIO 是用 Serializable 方式傳送圖片,
你要如何解釋為什麼使用 FileOutputStream 沒有問題?
---
ImageIO 不是用 Serializable 在傳資料的,
他是把 image,依照你所指定的 format (jpg, png, etc) 寫成對應的 Image File,
所以用 ImageIO 把 image 寫成檔案後,你家的繪圖軟體才打得開。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.160.117
→
01/02 10:32, , 1F
01/02 10:32, 1F
→
01/02 10:57, , 2F
01/02 10:57, 2F
→
01/02 11:07, , 3F
01/02 11:07, 3F
→
01/02 11:09, , 4F
01/02 11:09, 4F
→
01/02 11:11, , 5F
01/02 11:11, 5F
→
01/02 11:16, , 6F
01/02 11:16, 6F
→
01/02 11:18, , 7F
01/02 11:18, 7F
→
01/02 11:25, , 8F
01/02 11:25, 8F
→
01/02 11:29, , 9F
01/02 11:29, 9F
→
01/02 11:31, , 10F
01/02 11:31, 10F
→
01/02 11:31, , 11F
01/02 11:31, 11F
→
01/02 11:32, , 12F
01/02 11:32, 12F
→
01/02 11:33, , 13F
01/02 11:33, 13F
→
01/02 11:37, , 14F
01/02 11:37, 14F
→
01/02 11:38, , 15F
01/02 11:38, 15F
→
01/03 09:10, , 16F
01/03 09:10, 16F
→
01/03 09:12, , 17F
01/03 09:12, 17F
→
01/03 09:13, , 18F
01/03 09:13, 18F
→
01/03 09:21, , 19F
01/03 09:21, 19F
→
01/03 12:27, , 20F
01/03 12:27, 20F
→
01/03 12:29, , 21F
01/03 12:29, 21F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 7 篇):