Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 - Fatal编程技术网

无法将完整的音频流写入java中的音频文件

无法将完整的音频流写入java中的音频文件,java,Java,我正在尝试使用java将音频转换为音频流,然后再转换回音频。当我将wav文件读入字节数组时,它显示大约30000字节,但当我将其写入新的fle时,它只写入44字节。请告诉我哪里出错了。代码片段如下所示: File src = new File("C:\\test.wav"); AudioInputStream ais = AudioSystem.getAudioInputStream(src); byte[] data = new byte[ais.available

我正在尝试使用java将音频转换为音频流,然后再转换回音频。当我将wav文件读入字节数组时,它显示大约30000字节,但当我将其写入新的fle时,它只写入44字节。请告诉我哪里出错了。代码片段如下所示:

    File src = new File("C:\\test.wav");
    AudioInputStream ais = AudioSystem.getAudioInputStream(src);  
    byte[] data = new byte[ais.available()];
    int x = ais.read(data);

    int n = AudioSystem.write(ais, AudioFileFormat.Type.WAVE, new File("C:\\test2.wav"));
    System.out.println("x="+x+"  n="+n);

n的输出是44。

我认为问题在于您已将AudioInputStream的全部内容读取到字节数组中。这意味着当您将AudioInputStream实例传递给AudioSystem.write()方法时,它将已经位于文件的末尾。(它正在写入的44个字节可能只是标题信息或类似信息。)

快速诊断的方法是注释掉对ais.read(data)的调用,看看它是否开始正确地写出文件

一种可能的解决方案是在将文件读入字节数组后,在AudioInputStream上使用mark()和reset()方法移回文件的开头