流是一组有序的数据序列,将数据从一个地方带到另一个地方。在 Java 中,控制台的输入输出、文件的读写和网络通信都是通过「流」的方式进行的。
可以分为「输出流」和「输入流」两种。数据从外部进入程序为「输入」,反之为「输出」。
可以分为「字节流」(传输字节,如文本、图像、声音等各种内容)和「字符流」(传输 16 bit 的字符,只能用来处理文本)。
Java 的所有的流位于 java.io
包中,继承下面的「四大家族」。
字节流 | 字符流 | |
---|---|---|
输入流 | InputStream |
Reader |
输出流 | OutputStream |
Writer |
类名以 Stream
结尾的流都是字节流,以 Reader
或 Writer
结尾的流都是字符流。
每个 Java 程序都包含一个系统流位于 java.lang.System
,包含三个子类:
System.in
标准输入流,默认设备是键盘输入。相当于 C 的 STDIN
。System.out
标准输出流,默认设备是控制台。相当于 C 的 STDOUT
。System.err
标准错误流,默认设备是控制台。相当于 C 的 STDERR
。在 C 语言里用一句 gets()
就能做的事,在 Java 这边不是很容易。结论:C > Java。
先从 System.in
创建一个 BufferedReader
字符流 br
。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));