IO流
IO为java的基于流,流(Stream)产生或使用信息的抽象。
最常见的流就是System.out它是典型的输出流。
预定义流:
当然除了IO流,还有以种流叫做预定义流由System实现,包括三个预定义流变量,变量名为 in,out和err
System.out 为标准的输出流,默认情况下为控制台。
System.in 为标准的输入流,默认情况为键盘。
System.err 为标准的错误流,默认情况为控制台。
想必前两种小伙伴们很熟悉吧,但是什么是错误了流呢?
这个就要区分它们的类型,System.in是InputStream类型的对象,而System.out 和 System.err是PrintStream的对象。
import java.io.*;
public class IOTest01 { // read an array of bytes from the keyboard .
public static void main(String []args) throws IOException{
byte data [] = new byte[10];
System.out.println("Enter some characters.");
System.in.read(data);
System.out.println("You Enter :");
for(int i =0;i<data.length;i++){
System.out.print((char)data[i]);
}
System.err.println("ff");
}
}
/*
Enter some characters.
I Love you
You Enter :
I Love youff
*/
//输出结果是这样,同为输出,它们有什么区别呢?
// Sun公司给与的回答:
err的定义:
public static final PrintStream err = null;
out的定义 :
public static final PrintStream out = null;
/**
* 乍一看,这两个的定义不都一样的吗?有啥区别 都是为空,在IDE上
* 面由err输出的是带红色字体,而out输出的白色字体。
* 难道只是字体的颜色有区别吗?
哈哈: 来看一下sun公司人的解释:
* The "standard" error output stream. This stream is already
* open and ready to accept output data.
* <p>
* Typically this stream corresponds to display output or another
* output destination specified by the host environment or user. By
* convention, this output stream is used to display error messages
* or other information that should come to the immediate attention
* of a user even if the principal output stream, the value of the
* variable {@code out}, has been redirected to a file or other
* destination that is typically not continuously monitored.
*/
// 看完之后,以我目前的能力无法理解。
字节流:
什么是字节,就是一个字符串一个字符串的读取,可以读取任何形式的文件,如图片,音频,视频。
而字符流只能读取文本文件,也就是.txt文件。
涉及到的是两个顶端的抽象类,InputStream,和OutputStream。主要是定义规范
// 大型搜索
public abstract class InputStream implements Closeable {
}
public class FilterInputStream extends InputStream{
}
public class BufferedInputStream extends FilterInputStream {
}
// 在Java.io包中有很多类,这些类的方法有很多,有关io的字节流类如下
字节流 | 含义 |
---|---|
BufferredInputStream | 输入缓冲流 |
BufferedOutputStream | 输出流缓冲 |
ByteArrayInputStream | 从字节数组读取的输入流 |
ByteArrayOutputStream | 写入字节数组的输出流 |
DataInputStream | 包含用于读取Java标准数据类型方法的输入流 |
DataOutputStream | 包含用于写入Java数据类型的输出流 |
FileInputStream | 从文件读取的输入流 |
FileOutputStream | 写入文件都输出流 |
FilterInputStream | 实现InputStream |
FilterOutputStream | 实现OuterputStream |
ObjectInputStream | 对象的输入流 |
ObjectOutputStream | 对象的输出流 |
PipedInputStream | 输入管道 |
PipedOutputStream | 输出管道 |
PrintStream | 包含print()和println()流 |
PushbackInputStream | 允许字节反回到流的输入流 |
SequenceInputStream | 一个,两个或者多个输入流的组合,逐个读取 |
InputStream | 描叙流输入的抽象类 |
OutputStream | 描叙输出的抽象类 |
观察以上类名凡是带有input为输入,output为输出。
那在计算机中什么是输入输出呢?
输入:往内存中读入硬盘上的数据 (read)
输出:从内存中往硬盘写入数据(write)