JAVA中的IO流

来源:互联网 发布:js动态控制div的边框 编辑:程序博客网 时间:2024/06/06 02:06

流的概念

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方法一次能读取一行数据

 

转换流:InputStreamReaderOutputStreamWriter用于字节数据到字符数据的相互转换

InputStreamReader需要和InputStream”套接”在一起

OutputStreamWriter需要和OutputStream”套接”在一起


数据流:提供了处理存取JAVA原始数据类型(48种)的方法。

DataInputStream 需要和InputStream”套接”在一起

DateOutputStream需要和OutputStream”套接”在一起


打印流(只有输出流):具有flush功能,不会抛异常。

 

Object流(可序列化流):

某个类的对象想要实现可序列化,需要实现Serializable接口,这个对象的所有属性(包括private属性、应用的对象)都可以被序列化和反序列化,来保存和传递——自动序列化。Externalizabli接口(是Serializable接口的子接口)也可以用来实现序列化——自己控制需要序列化的属性。通过调用writerExternal()方法和readExternal()方法指定需要实现序列化的属性和反序列化的属性——手动序列化。

Serializable接口中,可以用transient关键字来修饰不需要序列化的属性(不能修饰方法和类),序列化时变量的值为默认值。注意被static修饰的变量,无论加不加transient关键字都不会自动被序列化。而Externalizabli接口中,不管transient关键字修饰与否,只看writerExternal()方法和readExternal()方法中是否应用了该属性。