gpt4 book ai didi

java - 在java中覆盖文件的二进制值

转载 作者:行者123 更新时间:2023-11-29 03:57:05 24 4
gpt4 key购买 nike

我参与了一个项目,我们通过修改指定位置的字节来隐藏 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 文件,结果都一样。

可能是什么问题?为什么我的程序甚至没有给我错误消息就结束了?

import java.io.File;import java.io.RandomAccessFile;import java.io.IOException;

public class Edit {

private static void doAccess() {

try {
//Reads mp3 file named a.mp3
File file = new File("a.mp3");
RandomAccessFile raf = new RandomAccessFile(file, "rw");

//In this part I try to read the first 10 bytes in the file
byte ch;
for (long i = 0; i < 10 ; i++) {
raf.seek(i); //position ourselves at position i
ch = raf.readByte(); //read the byte at position i
System.out.println("Read "+ i + "th character of file: " + (char)ch); //print the byte at that position
//repeat till position 10
}

System.out.println("End of program");

raf.close();

} catch (IOException e) {
System.out.println("IOException:");
e.printStackTrace();
}
}

public static void main(String[] args) {
doAccess();
}

}

提前致谢!

最佳答案

我刚刚尝试了您的代码,它对我有用。问题在于您的 IDE 处理 '\0' 字符的方式(第 4 个字节是 '\0')。为了看到真正的输出,将打印语句(在循环内)更改为:

System.out.println("Read " + i + "th character of file: " + ch);

(即:省略 char (char) 转换)。然后你会得到这个输出:

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

除此之外,我建议如下:

  • 考虑使用预制库来检索/写入 MP3 元数据。这比从头开始实现此逻辑要好得多。
  • 您不需要在循环中使用 seek()。当您打开文件时,您位于位置 0,并且每个 readByte() 都会将该位置前进 1。
  • 如果将 ch 变量的定义移到循环内,代码将更具可读性。如果您仅在循环内部使用它,则没有理由在外部定义它。

关于java - 在java中覆盖文件的二进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com