Re: [問題] ObjectOutputStream + ImageIO 出現的問題
終於把這個問題弄清楚了。
讓我從實驗的步驟開始說明吧。
---
1. 為了要方便觀察接收到的封包,
所以我做了一張只有 1x1 的圖片,
接著再用程式把這張圖片讀進去再重新寫成圖片。
這張圖片的 16 進位 data 如下: (69-byte)
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
00 00 00 01 00 00 00 01 08 02 00 00 00 90 77 53
DE 00 00 00 0C 49 44 41 54 78 DA 63 F8 FF FF 3F
00 05 FE 02 FE 33 12 95 14 00 00 00 00 49 45 4E
44 AE 42 60 82
2. 從傳送端用 ImageIO.write() 送出這張圖片,
接收端會收到完全相同的 data。
3. 傳送端連續傳送兩次此圖片時,
也只是相同的 data 重複兩次,
並沒有看到我所預期的...多出來的 16-byte。
於是我又讓接收端用 ImageIO.read(),
結果還是一樣,第 1 張沒問題,第 2 張就會失敗。
4. 實驗做到這裡其實就可以看出端倪了,
剩下來都只是些驗證了,我就直接講結論吧。
ImageIO.write() 會寫出 69 byte,
而 ImageIO.read() 只會讀入 53 byte,
我試著把原始的 png 檔案只留下前 53 byte,(或著是隨意竄改最後 16-byte)
這個時候秀圖軟體是沒辦法開啟這個檔案的,
但是用 ImageIO.read() 還是可以正常的讀入圖片。
我猜測最後的 16-byte 應該是 png 格式的 check sum 之類的東西吧,
而 ImageIO.read() 並沒有做這樣的驗證,甚至資料連讀都沒讀 Orz
有錯請指教,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.160.117
討論串 (同標題文章)
完整討論串 (本文為第 3 之 7 篇):