【发布时间】: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))以从目标(网站)获取数据.还是其他对象将数据放入流中?谢谢回复!