更新しました:
この質問に関連するプロジェクトは、この投稿が共有されてから大幅に変更されました。実際には、送信が遅くなるため、画像の送信に TCP ソケットを使用しないことを強くお勧めします。UDP 経由で画像を送信し、RGB を使用する代わりに YUV から JPG に圧縮する問題を修正しました。これにより、画像の各レイヤーを処理する必要がないため、画像の送信と再構築の作業が簡単になります。
画像のサイズを知るには、UDP パケットの最初のバイトにこの情報を追加するだけなので、サイズが適切に受信されない場合、ソケットのタイムアウトによりそのパケットが破棄され、次の UDP を受信したときに通信は引き続き機能します。パケット。
これは元の質問に対する回答ではないため、未回答のままにして、同じ問題を抱えている他の人が解決策を見つけてここに投稿できるようにします。
------------------------ 元の投稿: ----------------------- ----
まず第一に、助けてくれてありがとう、そして私の英語についてお詫び申し上げます。私はスペイン出身です。
ソケットを使用して TCP 経由でコンピューターから画像を受信しています。すべての画像について、レイヤー (RGB) の数、各レイヤーの行と列、および各ピクセルの値を取得します。データを収集するには、DataInputStream
.
通常は問題なく動作しますが、次の関数で問題を引き起こす行と列の数の値が間違っていることがあります。つまり、送信されないデータを待ってアプリがフリーズしたり、単にデータを保持する配列でインデックス エラーが発生したりすることがあります。 .
DataInputStream
したがって、行と列の数が多すぎる場合はデータをクリアしたいのですが、ピクセル値の間違ったバイトでいっぱいのをクリアする方法が見つかりません。
DataInputStream
また、のサイズは次のように計算されるため、わかりませんLayers * Width * height
。したがって、このキャンプの実際の値を取得しないと、スキップする必要があるバイト数を知ることができません。
質問:
誰かが単にクリアする方法を知ってい
DataInputStream
ますか?そうでない場合、次のような別のタイプの入力方法を使用する必要があり
BufferedInputStream
ますか?