簡體   English   中英

Java ImageIO.write發送的數據多於ImageIO.read接收的數據?

[英]Java ImageIO.write sends more data than ImageIO.read receives?

我正在嘗試通過套接字發送圖像,我遇到了一個奇怪的問題.ImageIO.write發送的數據比ImageIO.read接收的數據多。 例如,如果我在循環中有以下代碼:

(客戶端)

out.writeByte(222);//magic num for testing
out.writeByte(blockSize);
out.writeByte(x / blockSize);
out.writeByte(y / blockSize);
ImageIO.write(part, "PNG", out);

(服務器端)

if (din.readUnsignedByte() != 222) {
    throw new RuntimeException();
}
int partSize = din.readUnsignedByte();
int partX = partSize * din.readUnsignedByte();
int partY = partSize * din.readUnsignedByte();
BufferedImage part = ImageIO.read(din);

在第二次迭代中,幻數將失敗,因為ImageIO.read尚未讀取從另一端發送的所有數據。 為什么是這樣? 這似乎是一個重大問題。 或者我錯過了什么?

編輯:這似乎是一個確認的錯誤,截至2008-04-14。 錯誤ID 6687964 為什么沒有這個被解決?唉。

我遇到了同樣的問題。 程序收到文件后,將確認發送回發件人。 如果發送者寫一個轉義字符new String("\\n").getBytes()然后刷新OutputStream它應該結束緩沖流並允許你到另一端的InputStream.ReadLine() 這應該得到多余的數據,循環的下一次重復將獲得新的圖像數據。 我知道這很煩人,但它確實有效

我想出了一個解決方法:

(回合是ByteArrayOutputStream,而不是套接字流)

                        ImageIO.write(part, "jpg", bout);
                        out.writeShort(bout.size());
                        bout.writeTo(out);
                        bout.reset();

此代碼將在寫入圖像之前將圖像的大小發送為短,從而防止錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM