Java 下载在线音频流并将其部分保存

Java 下载在线音频流并将其部分保存,java,android,audio,audio-streaming,audio-recording,Java,Android,Audio,Audio Streaming,Audio Recording,我正在尝试下载一个音频流,并将其保存在250kb的部分。我通过下载音频文件、关闭连接并在250kb处开始新的下载,使其正常工作。然而,当我这样做的时候,我在音频文件之间丢失了大约10秒的音频 我用来下载250kb部分音频流的代码是: public void downloadMP3() { Thread thread = new Thread(new Runnable() { @Override public void run() {

我正在尝试下载一个音频流,并将其保存在250kb的部分。我通过下载音频文件、关闭连接并在250kb处开始新的下载,使其正常工作。然而,当我这样做的时候,我在音频文件之间丢失了大约10秒的音频

我用来下载250kb部分音频流的代码是:

public void downloadMP3() {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                URL url = new URL("http://icecast.omroep.nl/3fm-bb-aac");
                InputStream inputStream = url.openStream();
                File filemp3 = new File(
                        Environment.getExternalStorageDirectory() + "/radiorecordings/file" + fileCount + ".mp4a");
                FileOutputStream fileOutputStream = new FileOutputStream(filemp3);

                int c;
                int bytesRead = 0;

                //keep reading until file is 250kb (250.000 bytes)
                while ((c = inputStream.read()) != -1 && bytesRead < 250000) {
                    Log.d("...", "bytesRead=" + bytesRead);
                    fileOutputStream.write(c);
                    bytesRead++;
                }

                fileCount++;
                downloadMP3();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
public void downloadMP3(){
Thread Thread=新线程(new Runnable(){
@凌驾
公开募捐{
试一试{
URL=新URL(“http://icecast.omroep.nl/3fm-bb-aac");
InputStream InputStream=url.openStream();
File filemp3=新文件(
Environment.getExternalStorageDirectory()+“/radiorecordings/file“+fileCount+”.mp4a”);
FileOutputStream FileOutputStream=新的FileOutputStream(filemp3);
INTC;
int字节读取=0;
//继续读取,直到文件达到250kb(250.000字节)
while((c=inputStream.read())!=-1&&bytesRead<250000){
Log.d(“…”,“bytesRead=“+bytesRead”);
fileOutputStream.write(c);
bytesRead++;
}
fileCount++;
下载mp3();
}捕获(例外e){
e、 printStackTrace();
}
}
});

我知道使用线程不是最好的解决方案,但这不是问题所在。是否有任何原因导致这些片段彼此不完全匹配?

音频部分之间的间隙可能是由于连接被关闭和重新打开


为什么不一直保持连接打开,并使用缓冲输出流写入文件?您可以写入自己的输出流(通过扩展常规缓冲流)并将其写入文件。一旦达到250kb,它可以决定关闭该文件并重新打开一个新文件,同时将音频缓冲到内存中

“有没有任何理由可以解释为什么片段不能完美地相互匹配”-因为重新连接需要时间。甚至可能需要10秒钟?请询问mp3格式,以及您是否可以简单地将流切割成片段(对此表示怀疑)但您需要找到一个解决方案,该解决方案不会关闭
输入流
。这是有意义的。我将尝试此方法,并将返回报告。如果bytesRead为250.000字节,则在while循环中检查,如果是,则我现在创建一个新的FileOutputStream。这确实解决了问题。谢谢!