java的输入流、输出流怎么理解?

import java.net.*;
import java.io.*;
public class URLConnDemo
{
   public static void main(String [] args)
   {
      try
      {
         URL url = new URL("http://www.xxx.com");
         URLConnection urlConnection = url.openConnection();
         HttpURLConnection connection = null;
         if(urlConnection instanceof HttpURLConnection)
         {
            connection = (HttpURLConnection) urlConnection;
         }
         else
         {
            System.out.println("请输入 URL 地址");
            return;
         }
         BufferedReader in = new BufferedReader(
         new InputStreamReader(connection.getInputStream()));
         String urlString = "";
         String current;
         while((current = in.readLine()) != null)
         {
            urlString += current;
         }
         System.out.println(urlString);
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

从这段代码来看,请求一个url并把内容读取出来显示,但是为什么这里用到getInputStream,应该不是getOutStream 输出吗?

阅读 5.2k
8 个回答

你要站在第一人称视角来,以java角度来看,Input就是输入给你(java程序),Output就是输出给别人(其他,网络,本地计算机等),不知道好不好理解。(:

只是名字而已,InputStreamReader的参数必须是InputStream,并是connection得"输出"。

InputStream里只有read方法没有write方法。

InputStream

OutputStream里只有write方法没有read方法。

要想更好的理解:
input 对应 read
output 对应 write

InputStream 是用来读取的,OutputStream 是用来写入的;换句话说,输入流是指输入到系统中的流,系统从这个流中读取内容;输出流是指从系统输出的流,系统往这个流中写入内容。这个取名方式是站在使用者的角度,而不是 Stream 对象的角度。用过几次就习惯了。

这边的输入和输出是相对于jvm来说的。
connection.getInputStream() 相对于jvm来说就是从外部拿到流,当然是输入。

只要是读取就是InputStream,写入就是OutputStream

IO里面,Input:输入,Output:输出
可以打个比方,一个是眼睛和耳朵,一个是嘴巴

代码目标是与一个网址建立链接,然后把内容读取出来显示,建立链接用的是Connection,然后你显示内容,需要用到的是眼睛和耳朵,所以使用InputStream,用来read。

可以阅读下URLConnection的代码,他同时具备InputStream和OutputStream,然后HttpURLConnection作为子类,在实现过程中,会基于HTTP协议Send Connect Request,而这个发送使用的就是OutpustStream,因为这里是你要告诉远端你的需求,需要用到嘴巴。

就好比自来水厂与你家的关系,

服务器等于自来水厂,
你家等于客户端,你写的这段demo就是客户端,你请求的就是远程服务器

客户端与服务器建立连接就好比你家向自来水厂开户,只有开户了,自来水厂才提供服务

流就是你家与自来水厂连接的水管,不同的流就等于不同尺寸,不同功能的水管

对于服务器来说是输出,对于客户端是输入,好比自来水厂来说是放水,你家是进水。

如果你要将水装去桶中,就好比你将远程服务器输送过来的数据保存到文件中,这时再用输出流,将数据输送到文件

新手上路,请多包涵

connection.getInputStream()就是从外部输入到本地的,所以是输入,即从xxx.com这个地址往里拿

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题