繁体   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