首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BufferedInputStream获取数据

使用BufferedInputStream获取数据
EN

Stack Overflow用户
提问于 2013-11-12 14:37:10
回答 1查看 169关注 0票数 0

我正在尝试通过http监控apache服务器。我使用的代码如下所示。

代码语言:javascript
复制
byte[] buffer = new byte[8192];
byte[] outputBuffer = new byte[8192];
int bytesRead = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();

try {
    BufferedInputStream bis = new BufferedInputStream(sourceUrl.openStream());
    while (true) {
    bytesRead = bis.read(buffer);
        if (bytesRead == -1)
            break;

        baos.write(buffer, 0, bytesRead);
    }
    bis.close();
    outputBuffer = baos.toByteArray();
    baos.close();

    return outputBuffer;
}catch{}

我希望值是名称-值对。但有时我得到的结果如下所示

代码语言:javascript
复制
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
    <head>
      <META HTTP-EQUIV="Refresh" CONTENT="0;URL=LoginAction.action">
      </head>
      <body>
        <p>Loading ...</p>
      </body>
  </html>

为什么会发生这种情况。我应该在代码中做些什么来获得正确的值?请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2013-11-12 16:52:37

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=LoginAction.action">表示用户代理(也称为浏览器)将通过加载相对URL LoginAction.action来刷新页面。所以您的问题出在服务器/会话状态,而不是从流中读取的代码。

顺便说一下,您对BufferedInputStream的使用已经完全过时了。您可以直接从URL.openStream()返回的InputStream中读取。

此外,byte[] outputBuffer = new byte[8192];是一派胡言。您永远不会使用在这里创建的数组,因为您用baos.toByteArray()的结果覆盖了这个变量的值。只需声明变量byte[] outputBuffer;就足够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19922508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档