2012-04-16 26 views
0

我正在嘗試讀取.raw文件以查找一些「損壞」的圖像。 我已經嘗試了一切。 從我的理解 以下應該工作使用fileinputstream從文件中讀取字節以查找丟失的圖像

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

,但只打印一個字節。我需要讀取所有這些字符並查找255個字節(表示新圖像的開頭),並將字節從前255開始保存,直到下一個255(下一個圖像)保存爲.jpg

對不起,如果我在這裏不清楚。

請問您可能有任何問題。

+0

read()方法實際上返回一個int – ControlAltDel 2012-04-16 02:06:30

+1

@vikiiii:你是不正確 - read()返回所讀取的字節(投達一個int),或-1 EOF。 – 2012-04-16 02:07:37

回答

1

您正在呼籲的FileInputStream的read()方法。該方法讀取一個字節並將其返回。來自Javadoc

從此輸入流中讀取一個字節的數據。如果沒有輸入可用,此方法會阻止。

你有幾個選擇...

您可以繼續在一次讀取一個字節,在這種情況下,你需要一個循環:

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 ... 
    } 
} 
+0

您可能想要通過將其寫入ByteArrayOutputStream來處理該字節。這將允許您將一個圖像中的所有字節保存爲一個字節[] – ControlAltDel 2012-04-16 02:11:58

+0

可以使用fileOutputStream來完成嗎? – user1304317 2012-04-16 02:14:33

+0

另外,我被告知JPEG文件以字節255 216 255 224開頭(這些是字節的整數格式)一旦找到該序列,我將如何使程序停止? – user1304317 2012-04-16 02:16:14