Java 无法读取已解码的mp3流

Java 无法读取已解码的mp3流,java,audio,javasound,Java,Audio,Javasound,我正在开发一个使用mp3编码/解码的应用程序。虽然原则上它对大多数文件的行为都是正确的,但也有一些例外。我检测到这些文件缺少标题。在尝试解码时,我得到一个数组越界异常。我用了两种方法,但都失败了 第一: DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais); byte[] audioData = IOUtils.toB

我正在开发一个使用mp3编码/解码的应用程序。虽然原则上它对大多数文件的行为都是正确的,但也有一些例外。我检测到这些文件缺少标题。在尝试解码时,我得到一个数组越界异常。我用了两种方法,但都失败了

第一:

    DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais);
    byte[] audioData = IOUtils.toByteArray(dais);//exception here
第二点:

    ByteOutputStream bos = new ByteOutputStream();
    // Get the decoded stream.
    byte[] byteData = new byte[1];
    int nBytesRead = 0;
    int offset = 0;
    int cnt=1;

    while (nBytesRead != -1) {
        System.out.println("cnt="+cnt);
        nBytesRead = dais.read(byteData, offset, byteData.length);//exception here at first loop
        if (nBytesRead != -1) {
            int numShorts = nBytesRead >> 1;
            for (int j = 0; j < numShorts; j++) {
                bos.write(byteData[j]);
            }
        }
        cnt+=1;
    }
    byte[] audioData = bos.getBytes();
ByteOutputStream bos=新的ByteOutputStream();
//获取解码流。
字节[]字节数据=新字节[1];
int nBytesRead=0;
整数偏移=0;
int-cnt=1;
而(nBytesRead!=-1){
System.out.println(“cnt=“+cnt”);
nBytesRead=dais.read(byteData,offset,byteData.length);//第一个循环中出现异常
如果(nBytesRead!=-1){
int numShorts=nBytesRead>>1;
对于(int j=0;j

由于dais流具有内容/字节,因此标题或其结构似乎存在问题。然而,它可以开放的大胆和ffplay,所以我相信应该有一个解决办法。有什么办法对付它吗?

您可以使用代码冗余来提高可靠性。研究其他库,例如Xuggler或JLayer