使用HttpURLConnection进行数据流传输

4
我想使用HttpURLConnection通过HTTP POST打开一个长连接并处理流数据。这是为一个Android项目。
我不清楚如何在HttpURLConnection中实现这一点。在iOS中,NSURLConnection提供了异步模式,其中用户实现的回调在新数据到达并可用于解析时被调用。
在Java中的HttpURLConnection中,我看到有一个available()方法返回可以读取的字节数。但是,我不清楚如何编写一个流应用程序,它打开一个连接并随着新的流数据变得可用而反应,以从DataInputStream中解析出来。
我希望能得到一些指导。HttpURLConnection或Java中的其他类是否支持HTTP连接的非阻塞异步处理?
谢谢。
3个回答

5
经过更多的研究,我确认Java没有内置异步HTTP支持。一个名为Jetty的包含有内置异步HTTP和回调函数的HTTP客户端可供使用。它可以在以下链接中找到:http://wiki.eclipse.org/Jetty/Tutorial/HttpClient

1
创建一个继承Observable并实现Runnable的对象。你的主应用程序实现了Observer并将自己添加为新对象的观察者。
在一个新线程中运行你的对象。该对象对HTTPUrlConnection进行阻塞读取,并通知观察者刚刚读取到的数据。

1
有一个available()方法,返回可读取的字节数。
不是的。有一个available()方法,返回可读取的字节数,而不会阻塞。 这完全不同。
HttpURLConnection似乎不适合此任务。 HTTP是一种请求-响应协议,至少在Java类中实现时不是流协议。

了解一下Comet,你会发现有许多大型项目使用长连接的HTTP方法... iOS本地支持非阻塞式HTTP连接。标准的Java类显然从未考虑过这种可能性(因为它们更古老)。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接