2

Android アプリから Java アプリに画像を送信する必要があります。基本的に、送信するrfモジュールに送信する画像からのバイト配列が必要です。別のrfモジュールがバイト配列を受信して​​、画像を作成する必要があるJavaアプリに送信します。

Android コード:

FileInputStream fis = new FileInputStream(myFile);
    byte[] b=new byte[(int)myFile.length()];        
    fis.read(b);server.send(b);

Java コード:

FileOutputStream fwrite = new FileOutputStream(new File("my_xml"),true);
                                fwrite.write(bb);//bb is a byte from rf using input stream as soon as a byte comes it is read to file. This is necessary for some other reasons
                                fwrite.flush();
                                fwrite.close();

完全なファイルを取得した後:

FileInputStream fir=new FileInputStream("my_xml");
        final BufferedImage bufferedImage = ImageIO.read(fir);
        ImageIO.write(bufferedImage, "bmp", new File("image.bmp"));
        fir.close();

エラー javax.imageio.IIOException: Bogus Huffman table definition が発生しています テキスト ファイルが完全に送信されているため、rf は正常に動作しています。

4

2 に答える 2

0

このエラーは、フォーマットが間違っているために画像ファイルを読み取れないことを意味します。つまり、一部のバイトが欠落しているか、間違っているか、適切な位置にないため、ファイルをデコードできません。私の rf 転送には tcp/ip のようなプロトコルがないため、通信チャネルのエラーが原因で一部のバイトが失われ、エラーが発生します。

于 2012-09-11T08:20:27.327 に答える
0

ファイルをコピーするためだけに ImageIO を使用する必要はありません。バイトを読み書きするだけです。

あなたのコードには他の問題があります:

  1. read(byte[]) がバッファーを埋めると想定しています。そうではありません。Javadoc を確認してください。

  2. また、ファイルの長さがint. もしそうなら、大丈夫です。そうでない場合、あなたはうんざりしています。

  3. FileOutputStream受信したバイトごとに開閉しているようです。これは非常に非効率的です。一度開いて、すべてを書き込んで、閉じます。

  4. flush()close()は冗長です。

  5. 「my_xml」というファイルに画像を保存しています。まだ混乱していない場合、これは混乱を引き起こすだけです。

  6. ファイルさえ必要ありません。入力ストリームから直接画像をロードするだけです。

于 2012-09-11T08:39:29.910 に答える