我正在尝试使用Java ID3 Tag Library操纵MP3文件中的ID3标签。但是,当我尝试使用“MP3File”类进行任何操作时,我会收到IOException:Negative Seek Offset;
这是一个示例代码和堆栈跟踪:
package com.test;
import java.io.File;
import java.io.IOException;
import org.farng.mp3.MP3File;
import org.farng.mp3.TagException;
public class MP3Test {
public static void main(String[] args) throws IOException, TagException {
File f = new File("test.mp3");
MP3File mp = new MP3File(f);
System.out.println(mp.getFrequency());
}
}
--------------------------------------------------------------------------------
Exception in thread "main" java.io.IOException: Negative seek offset
at java.io.RandomAccessFile.seek(Native Method)
at org.farng.mp3.id3.ID3v1.seek(Unknown Source)
at org.farng.mp3.id3.ID3v1.read(Unknown Source)
at org.farng.mp3.id3.ID3v1.<init>(Unknown Source)
at org.farng.mp3.MP3File.<init>(Unknown Source)
at org.farng.mp3.MP3File.<init>(Unknown Source)
at com.test.MP3Test.main(MP3Test.java:15)
如你所见,即使是一个基本操作也会让我异常,这让我真的很难真正开发出一些东西......我想读的MP3文件工作得非常好。那么,关于为什么会发生这种情况的任何想法和/或如何解决它?
答案 0 :(得分:2)
那么,关于为什么会发生这种情况的任何想法和/或如何解决它?
冒着明显的风险,有两个可能的原因导致问题:
解决方案?
你问这是一个编程问题所以我假设你是一个程序员,并且能够进行一般的故障排除,特别是查找/阅读规范和调试Java。
好的...因为您自己似乎没有取得任何进展,所以我查看了我找到的源代码here。 (当然,这可能是错误的版本,但你没有说你正在使用的库的版本......)
问题出现在org.farng.mp3.id3.ID3v1.java
方法的seek
行309中:
// If there's a tag, it's 127 bytes long and we'll find the tag
file.seek(file.length() - 128);
现在,可能给出负搜索偏移异常的唯一方法是file.length()
返回的文件长度小于128.对于有效的MP3文件,情况永远不会发生。< / p>
所以我的猜测是,您要么尝试读取截断的 MP3文件,要么根本不读取MP3文件,或者您正试图从某些设备/文件系统中读取文件不能正确报告文件大小。
(值得阅读File.length()
的javadocs,了解为什么它可能会返回一个奇怪的值;例如为零。)