从urlConnection获得的InputStream向ByteArrayOutputStreet写入数据的处理。getInputStream()花费的时间超过1分钟。
代码片段
URL requestUrl= new URL(_sampleurl_);
HttpURLConnection urlConnection=(HttpURLConnection)requestUrl.openConnection();
urlConnection.setConnectTimeout(10000);
urlConnection.setReadTimeout(10000);
urlConnection.setRequestMethod("GET");
urlConnection.connect();
int statusCode=urlConnection.getResponseCode(); //200
long contentLengthByTen = urlConnection.getHeaderFieldLong("Content-Length", _defaultSize_); //7631029
InputStream inputStream = urlConnection.getInputStream();
final byte[] byteArray = new byte[16384];
int length;
ByteArrayOutputStream byteArrOutStrm = new ByteArrayOutputStream();
int k = 0;
while ((length = inputStream.read(byteArray)) != -1)
{
byteArrOutStrm.write(byteArray, 0, length);
k++;
}
一些观察结果是:
while循环单独执行超过一分钟,并且迭代了大约2650次
HttpURLConnection响应代码为200,因此整个内容在InputStream中可用
文件的内容长度为7631029(字节)。
我有两个问题:
套接字接收缓冲区中可用的字节数,它是发送方速度、接收方读取频率、网络带宽和路径MTU的函数。你所看到的并不令人惊讶:它表明你与发送者保持着良好的关系。
让发送者发送得更快。您的接收代码没有任何问题,尽管我想知道为什么您在对它做任何事情之前要在< code > ByteArrayOutputStream 中收集整个响应。这只会浪费内存并增加延迟。
问题内容: 我正在使用从运行约一分钟的进程中读取stdout。 我该如何stdout以流方式打印出该流程的每一行,以便可以看到生成的输出,但仍然阻止该流程终止,然后再继续? 似乎一次给出所有输出。 问题答案: 这是一个简单的示例(不检查错误): 如果ls结束太快,则while循环可能会在你读取所有数据之前结束。 你可以通过以下方式在中捕获其余部分:
问题内容: 当输入零作为输入时,我需要停止询问整数输入,并立即开始求和。当我键入零时,我的程序不会停止。我需要它停止并开始汇总它收集的所有输入。 这是我所拥有的: ///////////////有效的最终代码。谢谢!公共类Inttosum { 问题答案: 您正在使用一种称为循环条件的东西,但是在循环中更新了变量。您可以使用循环。更改 像 使用 我也建议先打电话再打电话。而且,由于您不使用(只是),
我试图从一个读取。我写了下面的代码 我不明白的是我应该在一次迭代中读取多少字节?流包含保存在磁盘上的文件。 我在这里读过,但我并不真正理解这篇文章。
我正在创建一个Java客户机程序,它向服务器发送一个命令,然后服务器返回一个确认和一个响应字符串。 响应以这种方式发回 客户端代码 public static void readStream(InputStream in){ 输出 客户端读取的完整响应 谢谢
我目前正试图从服务器读取图像文件,但得到的数据不完整或 这与缓冲区大小有关吗?我已经尝试使用静态大小而不是ContentLength。敬请指教。
问题内容: 我知道 bufio 包中的golang中的特定功能。 Peek返回下一个n个字节, 而不会使阅读器前进 。在下一个读取调用中,字节停止有效。如果Peek返回的字节数少于n个字节,则它还会返回一个错误,解释读取短的原因。如果n大于b的缓冲区大小,则错误为ErrBufferFull。 我需要能够从阅读器读取特定数量的字节,以 使阅读器更先进 。基本上,与上面的功能相同,但是它使阅读器更高级