本文介绍了写入的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时,衡量中间吞吐量[或]为什么写()阻塞,而阅读()是不是?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 03:56