流的概念
JAVA程序中处理外部文件的方式,读写文件的方法。
流的分类
1:输入流和输出流(流的方向)
输入流:InputStream抽象类;Reader抽象类
输出流:OutputStream抽象类;Writer抽象类
2:字节流和字符流(单位处理的数据大小)
字节流:InputStream抽象类;OutputStream抽象类
字符流:Reader抽象类;Writer抽象类
3:节点流和处理接(功能的不同)
节点流为可以从一个特定的数据源(也叫节点)读写数据处理流是“连接”在已经存在的流上,通过对数据的处理为程序提供更强大的读写功能。
| 字符流 | 字节流 |
输出流 | Writer | OutputStream |
输入流 | Reader | InputStream |
InputSream抽象类的基本方法
int read()//读取一个字节以整数返回
int read(byte[] buffer)
int read(byte[] buffer,int offset,int length)
void close()
OutpurStream抽象类的基本方法
void write(int b)
void write(byte[] buffer)
void write(buye[] buffer,int offset,int length)
void flush()//向文件中写入缓冲区所有数据(清空输出)
void close()//关闭流
Reader抽象类的基本方法
int read()//读取一个字符以整数的形式返回
int read(char [] cbuf)
int read(char [] cbuf,int offset,int length)
void close()
Writer抽象类的基本方法
void write(int b)
void write(byte[] buffer)
void write(buye[] buffer,int offset,int length)
void write(String string)
void write(String string,int offset,int length)
void flush()//向文件中写入缓冲区所有数据(清空输出)
void close()//关闭流
节点流类型
类型 | 字符流(两个字节) | 字节流 |
File(文件流) | FileReader FileWriter | FileInputStream FileOutPutStream |
Memory Array(内存数组流) | CharArrayReader CharArrayWriter | ByteArrayInputStream ByteArrayOutputStream |
Memory String(内存字符串流) | StringReader StringWriter | NO |
Pipe(管道)(线程间的通信) | PipedReader PipedWriter | PipedInputStream PipedOutputStream |
处理流
处理类型 | 字符流 | 字节流 |
Buffering(缓冲流) | BufferedReader BufferedWriter | BufferedInputStream BufferedOutputStream |
Filetering(过滤流) | FilterReader FilterWriter | FilterInputStream FilterOutputStream |
Converting between bytes and Character(转换流) | InputStreamReader OutputStreamWriter | NO |
Object Serialization(可序列化) | NO | ObjectInputStream ObjectOutputStream |
Data conversion(数据流) | NO | DataInputStream DataOutputStream |
Counting(计数流) | LineNumberReader | LineNumberInputStream |
Peeking ahead(预读取流) | PusbackReader | PushbackInputStream |
Printing(打印流) | PrintWriter | PrintStream |
缓冲流(4种):“套接”在其他流上的,对读写数据提供了缓冲的功能,提高读写效率
BufferedReader中有readerLine方法一次能读取一行数据
转换流:InputStreamReader和OutputStreamWriter用于字节数据到字符数据的相互转换
InputStreamReader需要和InputStream”套接”在一起
OutputStreamWriter需要和OutputStream”套接”在一起
数据流:提供了处理存取JAVA原始数据类型(4类8种)的方法。
DataInputStream 需要和InputStream”套接”在一起
DateOutputStream需要和OutputStream”套接”在一起
打印流(只有输出流):具有flush功能,不会抛异常。
Object流(可序列化流):
某个类的对象想要实现可序列化,需要实现Serializable接口,这个对象的所有属性(包括private属性、应用的对象)都可以被序列化和反序列化,来保存和传递——自动序列化。Externalizabli接口(是Serializable接口的子接口)也可以用来实现序列化——自己控制需要序列化的属性。通过调用writerExternal()方法和readExternal()方法指定需要实现序列化的属性和反序列化的属性——手动序列化。
在Serializable接口中,可以用transient关键字来修饰不需要序列化的属性(不能修饰方法和类),序列化时变量的值为默认值。注意被static修饰的变量,无论加不加transient关键字都不会自动被序列化。而在Externalizabli接口中,不管transient关键字修饰与否,只看writerExternal()方法和readExternal()方法中是否应用了该属性。