[英]Need help reading bytes from a file (incorrect bytes returned)
我試圖創建一個簡單的程序來編輯MP3標簽。但是問題是我停留在第一步,因為我什至不能將文件字節傳遞到字節數組中。從技術上講我可以,但是它們是錯誤的。
例如,如果我將字節復制到一個txt文件中並打開它,則大多數文本都是亂碼,包括標簽(稍后會出現問題),但第一個字母是ID3,這是正確的。
但是如果我在控制台中打印由mp3產生的字節數組,則第一個值是
1001001 1000100 110011 11 0 0 .....都是無效字符。但是在第一行之前添加一個零,在第二行之前添加一個零,在第三行之前添加兩個零,現在顯示ID3
是什么會導致零像這樣迷路? 每個mp3文件都一樣。在此先感謝您的幫助
這段代碼是非常簡單的副本
嘗試{
FileInputStream BF1 = new FileInputStream("test.mp3");
FileOutputStream fout = new FileOutputStream("byteresults.txt");
byte[] tempbyte = new byte[1024];
BF1.read(tempbyte);
BF1.close();
int i;
for(i=0;i<900;i++){
System.out.print(Integer.toBinaryString(tempbyte[i])+'\n');}
} catch(FileNotFoundException fnf)
{
System.out.println("Specified file not found :" + fnf);
}
catch(IOException ioe)
{
System.out.println("Error while copying file :" + ioe);
}
當打印二進制格式時,大多數系統會丟棄前導零,因為它們對最終值沒有幫助。 您只希望它的字節為8位cos,但是二進制計數本身卻不能那樣工作。 它不在乎8個插槽或4個插槽等。考慮3
以二進制形式寫為11
,所以為什么要麻煩地將其打印為00000011
? 為什么不0011
?? 人類的讀者無論如何都會忽略那些前導零。
也許您可以嘗試使用十六進制格式,因為它更簡單(=效率更高)。 就像是 :
for ( i=0; i<900; i++)
{
//System.out.print(Integer.toBinaryString(tempbyte[i])+'\n');
System.out.printf("0x%02X", tempbyte[i]);
}
這樣,您甚至可以對照某些Hex Editor軟件檢查輸出(處理完全相同的文件字節)。 更容易檢查您在正確的位置使用正確的值等保存了正確的字節...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.