gpt4 book ai didi

java - 监控输入流/httpclient.execute 的进度

转载 作者:行者123 更新时间:2023-11-30 09:50:29 24 4
gpt4 key购买 nike

我正在尝试获取 Apache HTTP 客户端执行方法的进度。有没有可能

  1. 获取execute方法读取的输入流的mount或
  2. 使用某种内部方法按发送数据的百分比或数量监控执行过程?

下面的代码将输入流发送到服务器(在本例中为图像),然后将其适当存储。问题是高分辨率相机和缓慢的移动运营商很难判断上传是否真的发生了。代码确实有效,但需要反馈。

public List writeBinary(String script, InputStream lInputStream) {
Log.d(Global.TAG,"-->writing to server...");

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5*1000);
HttpConnectionParams.setSoTimeout(httpParameters, 60*1000);

HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost("http://xxx.xxx.xxx.xxx" + script);

String responseText = null;
List responseArray = new ArrayList();

try {
httppost.setEntity(new InputStreamEntity(lInputStream, -1));
HttpResponse response = httpclient.execute(httppost);

if (response.getStatusLine().getStatusCode() == 200){
InputStream lInputStreamResponse = response.getEntity().getContent();
DataInputStream lDataInputStream = new DataInputStream(lInputStreamResponse);
BufferedReader lBufferReader = new BufferedReader(new InputStreamReader(lDataInputStream));

while ((responseText = lBufferReader.readLine()) != null){
responseArray.add(responseText);
}

lInputStream.close();
}

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return responseArray;
}

最佳答案

我更喜欢稍微“装饰”流/读取器/写入器对象,将所需的进度功能添加到其中。在装饰流/读取器/写入器中,您可以保留一个计数器来指示进度,您甚至可以将一个指示器回调放入其中。 ;-)

像这样:

public Class CountableOutputStream implements OutputStream { 
private int counter;
private OutputStream origStream;
......
}

实际上,整个 Java IO 包很好地展示了这种设计模式。

关于java - 监控输入流/httpclient.execute 的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com