繁体   English   中英

无法从InputStream读取

[英]Cannot read from InputStream

我当前的代码是这样的:

try {
    inputStream is = (new URL(urlpath).openStream());
    ByteArrayOutputStream os = new ByteArrayOutputStream();
        for (int len; (len = is.read(data)) != -1;) {
            os.write(data, 0, len);
        }
        os.flush();
        data = os.toByteArray();
    } catch (Exception e) {
        e.printStackTrace();
    }

但是is.read(data)始终返回-1 我不明白为什么它不起作用。 我在其他地方使用了相同的代码,但仍有效,但是在此应用程序中,此代码不起作用。 网址路径应该是什么问题?

您说此代码旨在在服务器上运行,但可以在您的本地环境中运行。 它不起作用的原因是因为服务器还提供了一个localhost地址,并且该资源仅在您的本地环境中。 localhost更改为资源所在的主机的IP地址,您的代码将起作用。

http://localhost... <-将告诉代码在运行代码的同一台计算机上查找,这就是服务器找不到它的原因。

localhost更改为运行Web应用程序的资源的IP地址(xxx.xxx.xxx.xxx)。

因此,如果Web应用程序托管在192.168.0.100则可以执行以下操作:

http://192.168.0.100:8080/School/abc.jsp?selectedLetter=d~2015012200001~NOTICE~%27%27

请注意,由于服务器需要访问外部资源才能与Web应用程序对话,因此防火墙规则也会起作用(您需要确保任何防火墙都不会阻止Web应用程序正在其上运行的主机上的端口8080)。

如果没有更多要读取的数据,InputStream将返回-1。

有关更多详细信息,请参见http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte [])

  1. 您是否通过在浏览器中打开请求来检查请求的内容?
  2. 您是否尝试打开服务器计算机防火墙上的端口?
  3. 您确定使用所使用的框架正确地执行了请求吗?

尝试这个

InputStream is = url.openConnection().getInputStream();

BufferedReader reader = new BufferedReader( new InputStreamReader( is )  );

String line = null;
while( ( line = reader.readLine() ) != null )  {
    System.out.println(line);
}
reader.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM