自学笔记:IO流

愿天堂没有BUG

共 3334字,需浏览 7分钟

 ·

2021-05-02 14:14

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的时候,不覆盖原文件内容,再文章末尾添加。


浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报