标签:
1、在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)
Java IO通过Stream(流)来实现。关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。
而对应于流还有一个概念:输入、输出设备。这些设备可以是磁盘文件、键盘(输入设备)、显示器(输出设备)、打印机(输出设备)、网络套接字等等。
下面,我们就来了解“流”。
Java中定义了两种类型的流:字节型,和字符型。
字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。
字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。使用字符流的另外一个好处就是:字符流比字节流更有效率。
字节流:
字节流包含两个顶层抽象类:InputStream和OutputStream。
1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。
2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输 出。
下面简单介绍字节流的几个常用子类:::
字节流类 |
功能简单介绍 |
DataInputStream |
包含了读取Java标准数据类型的输入流 |
DataOutputStream |
包含了写Java标准数据类型的输出流 |
ByteArrayInputStream |
从字节数组读取的输入流 |
ByteArrayOutputStream |
写入字节数组的输出流 |
FileInputStream |
从文件读入的输入流 |
FileOutputStream |
写入文件的输出流 |
PrintStream |
包含最常见的Print()和Println()的输出流 |
PushbackInputStream |
返回一个字节到输入流,主要用于编译器的实现 |
PipedInputStream |
输出管道 |
PipedOutputStream |
输入管道 |
SequenceInputStream |
将n个输入流联合起来,一个接一个按一定顺序读取 |
RandomAccessFile |
随机访问文件 |
BufferInputStream |
缓冲输入流 |
BufferOutputStream |
缓冲输出流 |
FilterInputStream |
实现了InputStream Interface |
FilterOutputStream |
实现了OutputStream Interface |
InputStream |
抽象类,描述流的输入 |
OutputStream |
抽象类,描述流的输入 |
抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和
write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。
2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输 出。
下面简单介绍字节流的几个常用子类:::
字节流类 |
功能简单介绍 |
DataInputStream |
包含了读取Java标准数据类型的输入流 |
DataOutputStream |
包含了写Java标准数据类型的输出流 |
ByteArrayInputStream |
从字节数组读取的输入流 |
ByteArrayOutputStream |
写入字节数组的输出流 |
FileInputStream |
从文件读入的输入流 |
FileOutputStream |
写入文件的输出流 |
PrintStream |
包含最常见的Print()和Println()的输出流 |
PushbackInputStream |
返回一个字节到输入流,主要用于编译器的实现 |
PipedInputStream |
输出管道 |
PipedOutputStream |
输入管道 |
SequenceInputStream |
将n个输入流联合起来,一个接一个按一定顺序读取 |
RandomAccessFile |
随机访问文件 |
BufferInputStream |
缓冲输入流 |
BufferOutputStream |
缓冲输出流 |
FilterInputStream |
实现了InputStream Interface |
FilterOutputStream |
实现了OutputStream Interface |
InputStream |
抽象类,描述流的输入 |
OutputStream |
抽象类,描述流的输入 |
抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和
write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。
InputStream用来进行数据读取,而OutputStream用来进行数据写入。接口描述:
public abstract class InputStream implements Closeable { public abstract int read() throws IOException; public int read( byte b[]) throws IOException; public int read( byte b[], int off, int len) throws IOException; public long skip( long n) throws IOException; public void close() throws IOException; public synchronized void mark( int readlimit); public synchronized void reset() throws IOException; //... } public abstract class OutputStream implements Closeable, Flushable { public abstract void write( int b) throws IOException; public void write( byte b[]) throws IOException; public void write( byte b[], int off, int len) throws IOException; public void flush() throws IOException; public void close() throws IOException; } |
Java中的Stream是需要通过close方法显式进行关闭的。OutputStream上面还有一个方法叫flush,close方法会自动执行flush。所以在调用close之前无需调用flush方法。
如果一个Stream在构建的时候,通过构造函数传入另外一个Stream,当该Stream被close的时候,原始的Stream也会被关闭,参见如下代码:
OutputStream file = new FileOutputStream( "quarks.ser" ); OutputStream buffer = new BufferedOutputStream( file ); ObjectOutput output = new ObjectOutputStream( buffer ); try { output.writeObject(quarks); } finally { output.close(); } |
有时间的话会把每个派生类简单解释一下。
标签:
原文地址:http://www.cnblogs.com/destim/p/5523290.html