1

我有一个存储在远程服务器上的图像文件(即http://example.com/images)。此文件夹中的图像以每 100 毫秒 1 个图像的速度更新 想想传输 MJPEG 图像的网络摄像机

我正在使用 apache HTTP 客户端 api 连接到我的远程服务器。我正在获取内容流

HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet("http://example.com/images/screenshot.jpg");
    HttpResponse response = httpClient.execute(httpget);
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    InputStream instream = entity.getContent();

我将输入流包装在 BufferedInputStream 中以获得更快的 I/O 。但是由于图像的生成速度非常快,而且它们的平均大小为 250kb。

我想使用 FileChannel 和 MemoryMappedBuffers 等 NIO 功能来提高 I/O 性能以及以非阻塞模式访问远程服务器上生成的图像文件。

但是无论我看到什么样本都在谈论创建以文件对象为参数的 FileInputStream / RandomAccessFiles。

我从远程服务器获取 InputStream 作为响应,我无法将其转换为 FileInputStream 以获取 FileChannel。

我想知道apache http客户端api中是否有任何提供fileChannels的实现。

或者我应该探索套接字以获取通道访问权限。我也探索过 javax.imageIO ,但不确定它是否能满足我对更快 I/O 的要求

4

1 回答 1

0

您的限制因素将是网络。如果您有一条 1mbps 的线路,这意味着您的实际最大传输量可能约为每秒 100 KB(我意识到一个字节为 8 位,但考虑到通信开销,典型的观察到的传输往往是 10 比 1)。

如果您希望每秒下载 10 张图片,并且每张图片大小为 250k,则需要 25 mbps 的网络连接。

套接字可能会提供一些小的改进,但它仍然无法实现您想要的。你考虑过压缩吗?例如,在服务器上,将多个图像组合成一个压缩存档、下载和解压缩。这仍然不会让您每秒获得 10 250k 图像,但可以让您更接近。

另一种选择可能是使用视频流,除非您绝对需要图像。

如果您绝对需要每秒 10 张图像,则需要提高与服务器的连接速度或减小图像的大小,或者两者兼而有之。

于 2010-06-30T15:33:47.947 回答