0

.rawファイルを読み取って、「破損した」画像を見つけようとしています。私はすべてを試しました。私の理解から、以下はうまくいくはずです

public void readFile(){
FileInputStream inFile = new FileInputStream(this.rawFile);
System.out.println(inFile.read());
}

ただし、1バイトのみが出力されます。それらすべてを読み、255のバイト(新しい画像の始まりを意味する)を探し、最初の255から次の255(次の画像)までのバイトを.jpgに保存する必要があります

ここではっきりしない場合は申し訳ありません。

ご不明な点がございましたら、お気軽にお問い合わせください。

4

1 に答える 1

1

read()FileInputStreamのメソッドを呼び出しています。このメソッドは1バイトを読み取り、それを返します。Javadocから:

この入力ストリームから1バイトのデータを読み取ります。このメソッドは、入力がまだ利用できない場合にブロックします。

いくつかの選択肢があります...

一度に1バイトずつ読み取り続けることができます。その場合、ループが必要です。

int read;

while ((read = inFile.read()) != -1)
{
  // process the byte
}

または、ファイルのチャンクをバッファーに読み込み、を使用してバッファーを反復処理することもできますread(byte[],int,int)

ファイルが大きすぎない場合は、一度にメモリに読み込むことができます。

final byte[] buff = new byte[this.rawFile.length()];    // size the array
inFile.read(buff);                                      // read the whole file in
inFile.close();                                         // close the file descriptor

for (int i = 0; i < buff.length; i++)                   // search the in-memory buffer
{
  if (buff[i] == 0xFF)
  {
    // found marker byte ...
  }
}
于 2012-04-16T02:10:18.443 に答える