【问题标题】:Get URL from InputStream从 InputStream 获取 URL
【发布时间】:2017-07-24 08:33:09
【问题描述】:

我想知道 java 中的 InputStream 是如何从低层次的角度实现的。

假设我在下面编写了一个用于与网站建立连接的 java 代码。

url = new URL("[some url info]");
URLConnection urlcon = url.openConnection();
InputStream in = urlcon.getInputStream();
while((readcount = in.read(buffer)) != -1){
        fos.write(buffer,0,readcount);

我可以通过转换类型直接从 InputStream(上述代码块中的“in”)知道 URL 并调用如下适当的方法吗?有没有其他方法可以从 InputStream 获取 URL?

(newtype) new = (newtype) in;
String Url = new.appropriatemethod();

我搜索了 InputStream 的所有子类,但我找不到任何具有提供 URL 接口的类。 (https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html)

但是,我认为 InputStream 以某种方式具有 URL 信息,可以从具有该 URL 的网站接收数据。

我可能对“Stream”有很大的误解。

感谢您阅读我的问题。 :)

【问题讨论】:

  • 既然有了url,为什么还要调用方法获取url。""[some url info]""
  • 你说的是webservice吗?
  • @karman 不,这只是 java I/O。我同意从“in”而不是“url”获取 URL 似乎很奇怪。但是,我陷入了应该从“in”获取 URL 的情况,我想知道这是否可能。
  • 如果你想要任何关于 url 的信息,你有 url 对象(docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html)。 InputStream 只是一个响应流,你不会从中得到它,除非它在响应正文中提供。你可以寻找响应头(mkyong.com/java/how-to-get-http-response-header-in-java)
  • @karman 我部分理解了你的观点。当我们键入“in.read()”时,它会读取来自网站的响应,因此“in”不应该知道基本信息(如 URL 或 Sokect(可能有 URL))以从目标(网站)获取数据.还是其他对象将数据放入流中?谢谢回复!

标签: java stream java-io


【解决方案1】:

InputStream 只是 stream 而不是 URLConnection。当您键入 InputStream in = urlcon.getInputStream(); 时。您将获得输入流而不是 url 连接。当您输入 in.read 时,您正在阅读 Stream 而不是 URLConnection

InputStream 是对数据源的引用(无论是文件、网络 连接等),我们要处理如下:

  • 我们通常希望将数据读取为“原始字节”,然后编写我们自己的代码来对这些字节做一些有趣的事情;

  • 我们一般要按顺序读取数据:即要到第n个字节的数据,必须先读取前面的所有字节,不保证能“跳回来”一旦我们读过它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2012-02-04
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多