自学笔记:IO流
I/O流
流根据流的方向分为输入流和输出流
输入流:字节输入流、字符输入流
输出流:字节输出流、字符输出流
输入流是从数据源中读取数据,只进行读操作。
输出流是将数据写入到指定文件中,只进行写操作。
根据流的数据类型分为字节流和字符流
字节流:字节输入流、字节输出流
字符流:字符输入流、字符输出流
纯文本数据优先使用字符流,除此之外使用字节流。
字节流
字节流结构图:
InputStream
为字节输入流的根类,有多个子类。
方法:
int read():从输入流中读取下一个字节并返回,返回为0~255。读取到末尾返回-1。
int read(byte[] b):读取多个字节,存到数组b中,并返回。输入流结束返回-1。
int available():返回输入流中可读或可跳过的的字节数。
void close():关闭输入流,并释放资源。
######OutPutStream
为字节输出流的根类,有多个子类。
方法:
void write(int b):将指定整数b的低八位写入输出流。
write(byte[] b):将指定数组b的b.length个字节写入输出流。
void flush():刷新输出流,输出全部缓存内容。
void close():关闭输出流,并释放系统资源。
######FileInputStream
FileInputStream和FileOutputStream用来实现文件的读写。
构造方法:
FileInputStream(String name):传入字符串形式的地址。
FileInputStream(File file):或者传入一个File对象。
该构造方法抛出FileNotFountException异常。
覆盖了父类的read()、available()、close()方法。
FileOutputStream
构造方法:
FileOutputStream(String name):传入字符串形式的文件地址。如果不存在就创建一个文件;存在就将源文件内容覆盖。public FileOutputStream(String name, boolean append):参数为True时,不覆盖文件内容,在文件末尾写新内容。FileOutputStream(File file)。
BufferedInputStream
BufferedInputStream和BufferedOutputStream都是缓冲流。使用缓冲流可以减少读取的次数,提高读取效率。输入时,先将数据读取进缓冲区,再从缓冲区读取单个字节;输出时,先将数据一个一个写道缓冲区,再将整个数组写入是输出流中。
构造放法:
BufferedInputStream(InputStream in):传入一个输入流。缓冲区大小默认521字节。
BufferedInputStream(InputStream in, int size):手动指定缓冲区大小。
BufferedOutputStream
构造方法:
BufferedOutputStream(OutputStream out):默认大小521字节。
BufferedOutputStream(OutputStream out, int size):指定大小。
DataInputStream
DataInputStream和DataOutputStream用于实现基本数据类型的输入输出。
构造方法:
DataInputStream(InputStream in)
方法:(举例)
byte readByte():读取一个字节并返回该字节。
int readInt():读取一个int型整数并返回。
String readUTF():读取UTF-8格式的字符串。
DataOutputStream
构造方法:
DataOutputStream(OutputStream out)
方法:(举例)
void writeByte(int v):将v的低8位写入。
void writeShort(int v):写入16位整数。
void writeBytes(String s):将字符串每个字符的低8位按顺序写入输出流。
ObjectInputStream
ObjectInputStream和ObjectOutputStream是实现对对象的输入输出,将对象的状态进行保存与恢复。
**注意:要对对象进行读写操作,首先该类要实现Serializable接口进行序列化。
ObjectInputStream实现了DataInput接口,所以可以读取基本数据类型。如readint()、readDouble。
构造方法:
ObjectInputStream(InputStream in)
方法:(举例)
int readInt();
Object readObejct():使用readObject()方法读出对象,其类型与顺序要与写入时一致。并且读取时是Object类型,需要向下转型。
ObjectOutputStream
构造方法:
ObjectOutputStream(OutputStream out)
方法:(举例)
void writeInt(int i)
void writeObject(Object o)
字符流
字符流结构图:
Reader
Reader和Writer都是字符流的根类。
方法:
int read():读取一个字符,返回1~65535的int值。末尾返回-1。
int read(char[] c):读取多个字符到数组c,达到末尾返回-1。
void close()
Writer
void write(int c):写入一个字符,将int型的低16位写入。
void write(char[] c):将字符数组c中的字符全部写入到输出流中。
void flush():刷新。
void close()
InputStreamReader
InputStreamReader和OutputStreamWriter可以实现字节流转换位字符流。
构造方法:
InputStreamReader(InputStream in):传入字节输入流,默认底层编码。
InputStreamReader(InputStream in, String cs):传入字节输入流,并指定编码。
OutputStreamWriter
构造方法:
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out,String cs)
BufferedReader
带有缓冲区的字符流。
构造方法:
BufferedReader(Reader reader)
BufferedReader(Reader reader,int size)
方法:
String readLine():冲输入流中读取一行,如果文件末尾返回null
BufferedWrite
构造方法:
BufferWriter(Writer out)
BufferWriter(Writer out,int size)
方法:
writer(String str):将字符串str写入输出流。
void newLine():根据系统写一个行分隔符。
FileReader
继承InputStream,构造放法是调用父类(InputStreamReader)的构造放法。
构造方法:
FileReader(String filename)
FileReader(File file)
FileWriter
构造方法:
FileWriter(String filename)
FielWriter(File file):根据file对象创建一个字符输出流,若文件不存在创建一个。存在就对内容覆盖。
FileWriter(String filename,boolean b):b为true的时候,不覆盖原文件内容,再文章末尾添加。