本文介绍了写入的OutputStream时,衡量中间吞吐量[或]为什么写()阻塞,而阅读()是不是?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要衡量上传的中间吞吐量和使用的)。
下载:(没有问题)
一切都很好下载,它使用code这样的:
InputStream为= ftp.retrieveFileStream(文件路径);
字节[]缓冲区=新字节[256 * 1024];
INT读;而((读= is.read(缓冲,0,buffer.length))!= -1){
Log.v(TAG,读=+读);
}
下面,缓冲液是256 KB的大小,和要下载的文件的总大小为1 MB。仍然 is.read每个调用()
返回只有2 KB。在这种情况下阅读()
不会阻止,直到缓冲区已满。这使我能够衡量中间下载吞吐量。到目前为止好。
上传(有问题)
现在来的痛苦。当我分配一个类似大小的缓冲区写入一个的OutputStream
,调用的write()
块,直到整个256 KB被写入。
为什么只有的write()
块,而阅读()
不?
于是,我就用。不像的OutputStream
的写(),与WritableByteChannel
的write()方法返回实际写入的字节数。因此,它必须是非阻塞的,对不对?没有这样的运气。这的write()
也阻止,直到整个缓冲区写入。这里是code:
字节[]缓冲区=新字节[256 * 1024];
新Random.nextBytes(字节阵列);OutputStream的OS = ftp.storeFileStream(文件路径);
与WritableByteChannel通道= Channels.newChannel(OS);
ByteBuffer中的ByteBuffer = ByteBuffer.wrap(字节阵列);
诠释书面= channel.write(ByteBuffer的);
所以,我怎么能测量时上传挡住了中间吞吐量?
一种方法是使用Android的。但是它也有自己的一套坎坷。根据文档,这些统计数据可能并不适用于所有平台。还需要处理像整数计数器溢出(2GB)后,和 。
有人能告诉我一条生路?
解决方案
Because that's the way the underlying operating system behaves.
这篇关于写入的OutputStream时,衡量中间吞吐量[或]为什么写()阻塞,而阅读()是不是?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!