Java 在Android上将字节数组写入文件不起作用

Java 在Android上将字节数组写入文件不起作用,java,android,file,io,byte,Java,Android,File,Io,Byte,我正在尝试将从设备接收到的字节流保存到Android上的h264文件中。我将bytebuffer设置为30MB。奇怪的是,当我使用十六进制编辑器查看保存文件的内容时,开始时只有大约4MB的数据似乎是合理的。所有其余的数据都是0x00。这超出了我的预期,我正在使用Nexus 6p进行测试 我的代码片段。基本上,我从回调接收数据,每次都将其保存到字节缓冲区。当我得到2500个这样的字节数组时,我将它们全部保存到一个文件中 private ByteBuffer stream_data = ByteBu

我正在尝试将从设备接收到的字节流保存到Android上的h264文件中。我将bytebuffer设置为30MB。奇怪的是,当我使用十六进制编辑器查看保存文件的内容时,开始时只有大约4MB的数据似乎是合理的。所有其余的数据都是0x00。这超出了我的预期,我正在使用Nexus 6p进行测试

我的代码片段。基本上,我从回调接收数据,每次都将其保存到字节缓冲区。当我得到2500个这样的字节数组时,我将它们全部保存到一个文件中

private ByteBuffer stream_data = ByteBuffer.allocate(30000000);
...

//Callback function
public void onResult(byte[] videoBuffer, int size){
            mDjiGLSurfaceView.setDataToDecoder(videoBuffer, size);
            if (count1 <= 2500) {
                if (size > 6) {
                    stream_data.put(Arrays.copyOfRange(videoBuffer, 0, size));
                    count1++;
                }
            }
            else if (count1 == 2501){
                count1++;
                new Thread() {
                    public void run() {
                        try{
                            File root = new File(Environment.getExternalStorageDirectory(), "DJI_Data");
                            if (!root.exists()) {
                                root.mkdirs();
                            }
                            File hola = new File(root, "stream_2500.h264");

                            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(hola));
                            bos.write(stream_data.array());
                            bos.flush();
                            bos.close();

                            handler.sendMessage(handler.obtainMessage(SHOWTOAST, "File Saved!"));

                            stream_data.clear();
                            stream_data.rewind();
                        }
                        catch(Exception e){
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
        }
private ByteBuffer stream_data=ByteBuffer.allocate(30000000);
...
//回调函数
public void onResult(字节[]视频缓冲区,整数大小){
setDataToDecoder(视频缓冲区,大小);
如果(计数16){
stream_data.put(Arrays.copyOfRange(videoBuffer,0,size));
count1++;
}
}
否则如果(count1==2501){
count1++;
新线程(){
公开募捐{
试一试{
文件根=新文件(Environment.getExternalStorageDirectory(),“DJI_Data”);
如果(!root.exists()){
root.mkdirs();
}
File hola=新文件(根,“stream_2500.h264”);
BufferedOutputStream bos=新的BufferedOutputStream(新文件输出流(hola));
write(stream_data.array());
bos.flush();
bos.close();
handler.sendMessage(handler.obtainMessage(showtoos,“文件已保存!”);
stream_data.clear();
stream_data.rewind();
}
捕获(例外e){
e、 printStackTrace();
}
}
}.start();
}
}

为什么要声明字节缓冲区?然后是30MB中的一个?去掉它,将视频缓冲区的字节直接写入文件。这是因为我的代码的其他部分需要这个字节缓冲区。但是,是的,谢谢你的建议,我将尝试直接将字节数组写入文件。