我正在尝试创建一个简单的程序来编辑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);
}
答案 0 :(得分:0)
打印二进制格式时,大多数系统会丢弃前导零,因为它们不会影响最终值。您只需要8个数字作为字节,但二进制计数本身不能像那样工作。它不关心8个插槽或4个插槽等。考虑3
被写为二进制11
,所以为什么打扰那个00000011
?为什么不0011
??无论如何,人类读者都会忽略那些领先的零。
也许您可以尝试Hex格式,因为它更容易(=效率更高)。类似的东西:
for ( i=0; i<900; i++)
{
//System.out.print(Integer.toBinaryString(tempbyte[i])+'\n');
System.out.printf("0x%02X", tempbyte[i]);
}
这样您甚至可以根据某些Hex Editor软件检查输出(处理完全相同的文件字节)。更容易检查您在正确的位置使用正确的值等正确的字节...