是用socket接收数据,需要在开头加上WAV文件头。我用了BufferedReader中的    reset 方法但是并不能返回文件开头,请问什么问题呢?            mAudioFile = new File(filePath + time + ".wav");
            mAudioFile.getParentFile().mkdirs();
            mAudioFile.createNewFile();
            fos = new FileOutputStream(mAudioFile);
            socket = new DatagramSocket(9003);
            buffer = new byte[320];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);            BufferedReader reader;
            reader = new BufferedReader(new FileReader(mAudioFile));
            reader.((int)mAudioFile.length()+1);            while (mIsRecording) {
                socket.setSoTimeout(1000);//等待1s 无数据则提示错误
                socket.receive(packet);
                //将录制的音频数据存储到本地
                fos.write(buffer, 0, buffer.length);
                fos.flush();
            }
               /**
             * 加WAV头文件
             */
            FileInputStream in;
            in = new FileInputStream(mAudioFile);
            totalAudioLen = in.getChannel().size();
            //由于不包括RIFF和WAV
            totalDataLen = totalAudioLen + 36;
            reader.reset();
            writeWaveFileHeader(fos, totalAudioLen, totalDataLen, longSampleRate, channels, byteRate);

解决方案 »

  1.   


    mAudioFile = new File(filePath + time + ".wav");
                mAudioFile.getParentFile().mkdirs();
                mAudioFile.createNewFile();
                fos = new FileOutputStream(mAudioFile);
                socket = new DatagramSocket(9003);
                buffer = new byte[320];
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);            BufferedReader reader;
                reader = new BufferedReader(new FileReader(mAudioFile));
                reader.((int)mAudioFile.length()+1);            while (mIsRecording) {
                    socket.setSoTimeout(1000);//等待1s 无数据则提示错误
                    socket.receive(packet);
                    //将录制的音频数据存储到本地
                    fos.write(buffer, 0, buffer.length);
                    fos.flush();
                }
                   /**
                 * 加WAV头文件
                 */
                FileInputStream in;
                in = new FileInputStream(mAudioFile);
                totalAudioLen = in.getChannel().size();
                //由于不包括RIFF和WAV
                totalDataLen = totalAudioLen + 36;
                reader.reset();
                writeWaveFileHeader(fos, totalAudioLen, totalDataLen, longSampleRate, channels, byteRate);