出现问题原因:在wifi-derect连接上后,获取到camera的预览数据之后用outputstream。write写进去,然后flush,对这个流的写入和flush不是很清晰,所以进行了这方面的学习。
这里最不清晰的点就是输入流.write进去后什么时候发送的
其实发不发送实际是在tcp中控制的(比如Nagle算法)。
可以利用发送端的socket对象调用setTcpNoDelay方法,即没有延迟,实时发送的方法,即等于取消了Nagle算法。
这里的意思也就是说write的时候有一个tcp的内部缓冲区,缓冲区满了,或者手动flush了,数据就会在TCP协议控制之下进行发送,TCP保证可靠传输,并且按序列,所以如果网络不好,前面的内容没成功发送,后面的内容是发不出去的。
总结:
可以认为是getoutputStream不断的去write,当把管道写满的时候,就是自动flush也就是将数据推送出去,手动flush就是不管管道里面数据有没有满,都会推送数据出去。一般在close()的时候,这个方面里面会先进行一次flush。