输入/输出(I/O)是指程序与外部设备或其他计算机进行交互的操作。

流(stream)的概念最早起源于UNIX操作系统中管道(pipe)的概念。
为了便于理解,读者可以将JAVA中的流想象成一种“数据流通的管道”,文件和程序之间一旦有了数据请求,二者之间就会建立某种形式的链接,从而形成数据流。
同时JAVA中的数据流也有不同的形式,既可以是基于二进制的字节流,也可以是基于某种编码方式的字节流。

流的方向是重要的,根据流的方向,流可以大致分成两类:输入流和输出流。
当程序需要读取数据时,就会开启一个通向数据源的管道,程序可以从该管道中提取数据,这种模式称之为输入流
同样的,当程序需要输出数据时,就会开启一个通向输出目的地的管道,程序可以通过此管道输出数据,这种模式称之为输出流

为了方便一些频繁的设备交互,JAVA语言系统预定了3个可以直接使用的流对象,它们分别是:
①System.in(标准输入):通常代表键盘输入;
②System.out(标准输出):通常输出到终端显示器;
③System.err(标准错误输出):通常将错误信息输出到终端显示器。

数据的输入、输出属于I/O操作部分,JAVA把处理输入/输出相关的类放在java.io包中,这个包不属于java.lang包,没有被默认加载,所以如果需要使用与I/O相关的类和对象时,需要把java.io显示的导入(import)到相应的程序中。

范例:

import java.io.*;
public class JAVA
{
	public static void main(String[] args)
	{
		String str;
		//创建标准输入流对象stdin来接收键盘System.in的输入;
		InputStreamReader stdin = new InputStreamReader(System.in);
		//以缓冲流模式来接受stdin
		BufferedReader bufin = new BufferedReader(stdin);
		//使用try和catch机制来处理输入的异常;
		try
		{
			System.out.print("请输入字符:");
			//用str字符串对象来接收键盘输入的一行数据;
			str = bufin.readLine();
			System.out.println("你输入的字符"+str);
		}
		catch(Exception e)
		{
			//System.out.println("发生I/O错误!!!");
			System.err.println("发生I/O错误!!!");
			e.printStackTrace();
		}
	}
}
import java.io. \*;

为了使用JAVA输入输出流类模块,就必须先导入相应的包库(java.io.*)支持。
其中*代表任何含义的通配符,它表示输入/输出(io)下的所有模块。
这里我们可以直接理解为:“导入java”的“io包库下”的“所有模块”。

BufferedReader bufin = new BufferedReader(stdin);

表示以缓冲流模式来接受stdin。
缓冲机制主要是为了处理应用程序和外设(输入/输出)之间速度不匹配的问题。、

//System.out.println("发生I/O错误!!!");
System.err.println("发生I/O错误!!!");

这里的两行代码功能基本一致,只是用于报错时,err代码的可读性更好一点。

最后的try-catch是错误捕捉处理机制。