ソケットを介して画像を送信しようとしていますが、奇妙な問題に遭遇しました.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);
2 回目の反復では、ImageIO.read が相手側から送信されたすべてのデータを読み取っていないため、マジック ナンバーは失敗します。どうしてこれなの?重大な問題のようです。または、何か不足していますか?
編集: これは 2008 年 4 月 14 日の時点で確認済みのバグのようです。バグ ID 6687964。なぜこれが修正されていないのですか?...ああ。