Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中重写文件的二进制值_Java_File_Binary - Fatal编程技术网

在java中重写文件的二进制值

在java中重写文件的二进制值,java,file,binary,Java,File,Binary,我参与了一个项目,我们通过修改指定位置的字节来隐藏mp3文件中的信息。我在网上找到了允许我写和读字节的代码,我正在玩它来读取mp3文件中的前10个字节 但是有一个问题,它一直上升到第4个字节,然后程序结束。或者换句话说,在我的for循环中,它只持续到i=4 这是我得到的输出 Read 0th character of file: I Read 1th character of file: D Read 2th character of file: 3 Read 3th character of

我参与了一个项目,我们通过修改指定位置的字节来隐藏mp3文件中的信息。我在网上找到了允许我写和读字节的代码,我正在玩它来读取mp3文件中的前10个字节

但是有一个问题,它一直上升到第4个字节,然后程序结束。或者换句话说,在我的for循环中,它只持续到i=4

这是我得到的输出

Read 0th character of file: I
Read 1th character of file: D
Read 2th character of file: 3
Read 3th character of file: 
Read 4th character of file: 
Process completed.
如果您注意到程序应该以system.out消息结束,该消息会显示“程序结束”,但甚至不会显示出来,那么这个循环就到此结束。代码如下。我尝试了几个mp3文件,结果都是一样的

有什么问题吗?为什么我的程序结束时甚至没有给我一条错误消息

导入java.io.File; 导入java.io.RandomAccessFile; 导入java.io.IOException

公共类编辑{

private static void doAccess(){
试一试{
//读取名为a.mp3的mp3文件
File File=新文件(“a.mp3”);
RandomAccessFile raf=新的RandomAccessFile(文件“rw”);
//在这一部分中,我尝试读取文件中的前10个字节
字节ch;
用于(长i=0;i<10;i++){
寻找(i);//把我们自己定位在位置i
ch=raf.readByte();//读取位置i处的字节
System.out.println(“读取”+i+“文件的第个字符:”+(char)ch);//在该位置打印字节
//重复到位置10
}
System.out.println(“程序结束”);
raf.close();
}捕获(IOE异常){
System.out.println(“IOException:”);
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
doAccess();
}
}

提前谢谢

我看不出代码有什么问题,也不明白它怎么可能产生您报告的输出

我怀疑您运行的类文件与您向我们展示的源代码不匹配


实际上,这个程序有两个问题:

  • 你应该在最后一句中结束英国皇家空军
  • 字节
    转换为
    字符
    是不可靠的。显然,有些字节与可打印字符不对应。我猜其中一个可能是JCreator解释为文件结尾字符的某个字符
    我看不出代码有任何错误,我也不明白它怎么可能产生您报告的输出

    我怀疑您运行的类文件与您向我们展示的源代码不匹配


    实际上,这个程序有两个问题:

  • 你应该在最后一句中结束英国皇家空军
  • 字节
    转换为
    字符
    是不可靠的。显然,有些字节与可打印字符不对应。我猜其中一个可能是JCreator解释为文件结尾字符的某个字符
    我已经运行了你的程序,效果很好。如果您不确定自己在做什么,我建议不要使用IDE作为初学者。而是使用命令行

    Edit.java
    a.mp3
    放在同一文件夹中。然后,键入以下内容:

    javac Edit.java
    java Edit
    

    这应该会产生正确的输出。

    我已经运行了您的程序,它工作正常。如果您不确定自己在做什么,我建议不要使用IDE作为初学者。而是使用命令行

    Edit.java
    a.mp3
    放在同一文件夹中。然后,键入以下内容:

    javac Edit.java
    java Edit
    

    这应该会产生正确的输出。

    我刚刚尝试了你的代码,它对我很有效。问题在于IDE处理
    '\0'
    字符的方式(第4个字节是
    '\0'
    )。要查看实际输出,请将打印语句(在循环内)更改为:

    (即:省略char
    (char)
    casting)。然后您将获得以下输出:

    Read 0th character of file: 73
    Read 1th character of file: 68
    Read 2th character of file: 51
    Read 3th character of file: 3
    Read 4th character of file: 0
    Read 5th character of file: 0
    Read 6th character of file: 0
    Read 7th character of file: 0
    Read 8th character of file: 15
    Read 9th character of file: 118
    End of program
    
    除此之外,我建议如下:

    javac Edit.java
    java Edit
    
    • 考虑使用预先制作的库来检索/写入MP3元数据。这比从头开始实现这个逻辑要好得多
    • 您不需要在循环中查找()。打开文件时,您处于位置0,每个readByte()都将该位置提前1
    • 如果将ch变量的定义移动到循环中,代码的可读性将更高。如果只在循环内部使用它,那么没有理由在外部定义它

    我刚刚尝试了你的代码,它对我很有效。问题在于IDE处理
    '\0'
    字符的方式(第4个字节是
    '\0'
    )。要查看实际输出,请将打印语句(在循环内)更改为:

    (即:省略char
    (char)
    casting)。然后您将获得以下输出:

    Read 0th character of file: 73
    Read 1th character of file: 68
    Read 2th character of file: 51
    Read 3th character of file: 3
    Read 4th character of file: 0
    Read 5th character of file: 0
    Read 6th character of file: 0
    Read 7th character of file: 0
    Read 8th character of file: 15
    Read 9th character of file: 118
    End of program
    
    除此之外,我建议如下:

    javac Edit.java
    java Edit
    
    • 考虑使用预先制作的库来检索/写入MP3元数据。这比从头开始实现这个逻辑要好得多
    • 您不需要在循环中查找()。打开文件时,您处于位置0,每个readByte()都将该位置提前1
    • 如果将ch变量的定义移动到循环中,代码的可读性将更高。如果只在循环内部使用它,那么没有理由在外部定义它

    代码看起来不错。你的节目一定有别的东西要结束了。什么打印
    过程已完成。
    ?JCreator执行此操作,它始终位于输出的末尾。抱歉,为了避免混淆,我应该删除那个部分:pAh,好的。嗯,你的代码行得通,我能读懂10个字节的mp3,并得到程序的结尾。代码看起来不错。你的节目一定有别的东西要结束了。什么打印
    过程已完成。
    ?JCreator执行此操作,它始终位于输出的末尾。抱歉,为了避免混淆,我应该删除那个部分:pAh,好的。嗯,你的代码行得通,我能读10字节的mp3