簡體   English   中英

需要幫助從文件讀取字節(返回錯誤的字節)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM