数据流一般分为输入流(InputStream)和输入流(OutputStream)两种, 但是在操作文件时, 当向其中写数据时, 它就是一个输入流;当从其中读取数据时, 它就是一个输入流。 当然, 键盘只是一个输入流, 而屏幕则只是一个输入流。
Java的规范数据流是指在字符方式下(如DOS), 程序与系统进行交互的方式, 分为三种:
System. in
“规范”输入流。 此流已翻开并预备提供输入数据。 通常, 此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
System. out
“规范”输入流。 此流已翻开并预备接受输入数据。 通常, 此流对应于显示器输入或者由主机环境或用户指定的另一个输入目标。
System. err
“规范”错误输入流。 此流已翻开并预备接受输入数据。
通常, 此流对应于显示器输入或者由主机环境或用户指定的另一个输入目标。 依照惯例, 此输入流用于显示错误音讯, 或者显示那些即运用户输入流(变量 out 的值)曾经重定向到通常不被连续监视的某一文件或其他目标, 也应该立刻惹起用户注意的其他信息。
上面以一个例子来说明:用System. in. read(buffer)从键盘输入一行字符, 存储在缓冲区buffer中, count保管实践读入的字节个数, 再以整数和字符两种方式输入buffer中的值。 read办法在java. io包中, 而且要抛出IOException异常, 我们在这里用try/catch捕捉。 程序如下(本例程序放在包biz. 1cn. stream里面):
package biz. 1cn. stream;
import java. io. IOException;
/**
* @author chenrz(simon)
* @date 2006-6-29
*
* 规范数据流例子(1cn. biz)
*
*/
public class Input {
public static void main(String[] args) {
System. out. println("请输入:");
// 输入缓冲区域
byte buffer[] = new byte[512];
int count;
try {
// 读取规范输入流
count = System. in. read(buffer);
System. out. println("实践读入的字节数目:" + count);
System. out. println("输入后果:");
// 直接输入buffer元素值
for (int i = 0; i count; i++) {
System. out. print(buffer
+ " ");
}
System. out. println();
// 以char方式输入buffer
for (int i = 0; i count; i++) {
System. out. print((char) buffer);
}
} catch (IOException e) {
e. printStackTrace();
}
}
}
上面说一下java. io包中的数据流及文件类
InputStream是表示字节输入流的一切类的超类。 需要定义InputStream的子类的应用程序必需始终提供返回下一个输入字节的办法, 也就是以字节作为基本处置单位。
直接已知子类:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
OutputStream是表示输入字节流的一切类的超类。 输入流接受输入字节并将这些字节发送到某个接收器, 需要定义 OutputStream 子类的应用程序必需始终提供至少一种可写入一个输入字节的办法。
直接已知子类:
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream,卡芙琳 PipedOutputStream
Reader用于读取字符流的笼统类。 子类必需实现的办法只有 read(char[], int, int) 和 close()。 但是, 多数子类将重写此处定义的一些办法, 以提供更高的效率和/或其他功用。
直接已知子类:
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
Writer写入字符流的笼统类。 子类必需实现的办法仅有 write(char[], int, int)、flush() 和 close()。 但是, 多数子类将重写此处定义的一些办法, 以提供更高的效率和/或其他功用。
直接已知子类:
BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter