使用Java I / O在HTTP网络上读取流
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java I / O在HTTP网络上读取流,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3117字,纯文字阅读大概需要5分钟。
内容图文
![使用Java I / O在HTTP网络上读取流](/upload/InfoBanner/zyjiaocheng/745/52ca62c98e5a4119bb66b0f8d19a0b48.jpg)
现在我正在努力提高java I / O的性能.我有一些疯狂的疑问,使用java I / O在网络上读/写流,如下所述.我脑海里浮现出几种意见.但我想清除所有这些
码
URL url = new URL("http://example.com/connector/url2Service");
URLConnection urlConnection = url.openConnection(); // Position 1
HttpURLConnection httpURLConnection = (HttpURLConnection)urlConnection;
String requestStr = buildRequestString();// Position 2
ByteArrayOutputStream rqByteArrayOutputStream = new ByteArrayOutputStream();
rqByteArrayOutputStream.write(((String)requestStr).getBytes()); // Position 3
httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("POST");
rqByteArrayOutputStream.writeTo(httpURLConnection.getOutputStream()); // Position 4
// Waiting for the response.
InputStream inputStream = httpURLConnection.getInputStream(); // Position 5
ByteArrayOutputStream rsByteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int length = 0;
while ((length = inputStream.read(buffer)) != -1) { // Position 6
rsByteArrayOutputStream.write(buffer, 0, length);// Position 7
}
String response = new String(rsByteArrayOutputStream.toByteArray());// Position 8
我的理解
>位置1:这将提供与远程资源进行通信的对象.但这种联系尚未建立.
>位置2:构建并获取请求.
>位置3:将字节写入ByteArrayOutputStream.
>位置4:这是与服务器进行通信的地方.我们正在编写字节.因此,服务器可以开始读取它们.当执行退出此行时,我们已完成发送请求对象.
>位置5:当我们退出此行时,服务器已完成发送响应对象.因此,我们可以开始阅读响应对象.
>位置6:将对象读取为4096字节块.
>位置7:将读取的字节写入ByteArrayOutputStream.
>位置8:完成读取响应并将其转换为字符串.
我的问题
>我们可以说上传请求的重点是什么
完成? (一世
相信这是在我们执行存在位置时完成的
4)
>重点是什么
我们可以说响应下载完成了吗? (我对第5点和第8点有疑问)
>当我们退出第5点时,这意味着响应是完全的
已下载或刚开始下载?
>到哪个点网络(带宽)会对性能产生影响? (第5,6,7 ……)
>现在我正在调整InputStream读取代码.如果您有任何建议请分享?
参考文献:
> http://www.oracle.com/technetwork/articles/javase/perftuning-137844.html
> http://www.oracle.com/technetwork/java/performance-139413.html
> http://www.javaworld.com/article/2076241/build-ci-sdlc/tweak-your-io-performance-for-faster-runtime.html
> http://www.kegel.com/java/wp-javaio.html
解决方法:
>在建立连接时,请求可以缓冲在系统缓冲区中,因此在您通过位置6之前,请求的发送 – “上传” – 不能保证完成.此时,您知道获取请求已经已被服务器接收,因为它现在正在发送响应.传递位置4只意味着您的程序已将请求传递到您自己的系统缓冲区.
>已收到响应 – “下载”已完成 – 在最后一次到第6位之后,当它返回-1表示流结束时.
>当您退出位置5时,可能已收到或未收到回复.您所做的只是获得对已存在的输入流的显式访问.响应已经完全接收并且已经缓冲在系统TCP缓冲区中,并且可能尚未收到任何响应.
>您必须从位置4到位置6的最后一次迭代打开网络资源.在代码中,您将继续无限期地保持连接打开状态.在循环退出位置6/7后,可以通过关闭连接来节省网络资源.
>(a)不要打扰rqByteArrayOutputStream.而是将输出流从OutputStreamWriter中的连接包装起来,并将请求字符串直接写入该输出流.这样可以节省几行代码并删除一次复制请求字符串的迭代.
>(b)在完成输出流和输入流时调用close(),以允许释放网络资源.
内容总结
以上是互联网集市为您收集整理的使用Java I / O在HTTP网络上读取流全部内容,希望文章能够帮你解决使用Java I / O在HTTP网络上读取流所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。