IO流第一次总结

字节流

字节流可以理解为写入和读取时是以文档字节为单位进行操作的,所以字节流可以对所有文件进行操作,是万能的。

关于输入和输出,并不是常规意义上的输入和输出,常规意义上,输入为写入,输出为读取,但是在IO流中,相反,输出为写入,输入为读取。

字节输入流

抽象基类InputStream

字节输入流的总抽象方法,其余子类通过对其方法进行重写使得功能得到进一步的完善。

成员方法
Modifier and Type Method and Description
int available() 返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close() 关闭此输入流并释放与流相关联的任何系统资源。
void mark(int readlimit) 标记此输入流中的当前位置。
boolean markSupported() 测试这个输入流是否支持 markreset方法。
abstract int read() 从输入流读取数据的下一个字节。
int read(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b
int read(byte[] b, int off, int len) 从输入流读取最多 len字节的数据到一个字节数组。
void reset() 将此流重新定位到上次在此输入流上调用 mark方法时的位置。
long skip(long n) 跳过并丢弃来自此输入流的 n字节数据。

注意:read(byte[] b, int off, int len)以为以数组byte[] b为框,框中的第off个字符开始,进行len长度的读取

两个具体子类

InputStream中的具体子类很多,本次仅详细说明两个

FileInputStream

主要用于对当前系统中的文件进行读取

构造器
Constructor and Description
FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream(FileDescriptor fdObj) 创建 FileInputStream通过使用文件描述符 fdObj ,其表示在文件系统中的现有连接到一个实际的文件。
FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
成员方法
Modifier and Type Method and Description
int available() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close() 关闭此文件输入流并释放与流相关联的任何系统资源。
protected void finalize() 确保当这个文件输入流的 close方法没有更多的引用时被调用。
FileChannel getChannel() 返回与此文件输入流相关联的唯一的FileChannel对象。
FileDescriptor getFD() 返回表示与此 FileInputStream正在使用的文件系统中实际文件的连接的 FileDescriptor对象。
int read() 从该输入流读取一个字节的数据。
int read(byte[] b) 从该输入流读取最多 b.length个字节的数据为字节数组。
int read(byte[] b, int off, int len) 从该输入流读取最多 len字节的数据为字节数组。
long skip(long n) 跳过并从输入流中丢弃 n字节的数据。
BufferedInputStream

FileInputStream为其父类,创造出一个缓存区,将文件中的数据放至缓存区进行操作,这样可以不用每次在文件底层中操作

构造器
Constructor and Description
BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。
BufferedInputStream(InputStream in, int size) 创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。
成员方法
Modifier and Type Method and Description
int available() 返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close() 关闭此输入流并释放与流相关联的任何系统资源。
void mark(int readlimit) 见的总承包 mark的方法 InputStream
boolean markSupported() 测试这个输入流是否支持 markreset方法。
int read()readInputStream的一般合同。
int read(byte[] b, int off, int len) 从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。
void reset()resetInputStream的一般合同。
long skip(long n)skipInputStream的一般合同。

字节输出流

抽象基类OutputStream

成员方法
Modifier and Type Method and Description
void close() 关闭此输出流并释放与此流相关联的任何系统资源。
void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。
void write(byte[] b)b.length字节从指定的字节数组写入此输出流。
void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。
abstract void write(int b) 将指定的字节写入此输出流。

两个具体子类

FileOutputStream

对系统中的文件进行写入

构造器
Constructor and Description
FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(FileDescriptor fdObj) 创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。
FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。
FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。

注意:其中两个方法中的append即为是否在文件中进行追加操作

成员方法
Modifier and Type Method and Description
void close() 关闭此文件输出流并释放与此流相关联的任何系统资源。
protected void finalize() 清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法。
FileChannel getChannel() 返回与此文件输出流相关联的唯一的FileChannel对象。
FileDescriptor getFD() 返回与此流相关联的文件描述符。
void write(byte[] b)b.length个字节从指定的字节数组写入此文件输出流。
void write(byte[] b, int off, int len)len字节从位于偏移量 off的指定字节数组写入此文件输出流。
void write(int b) 将指定的字节写入此文件输出流。
BufferedOutputStream

继承于FileOutStream,与BufferedInputStream相对应

构造器
Constructor and Description
BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
成员方法
Modifier and Type Method and Description
void flush() 刷新缓冲输出流。
void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。
void write(int b) 将指定的字节写入缓冲的输出流。

文件复制

单字节复制

public void singleCopy(FileInputStream in, FileOutputStream out) throws IOException {
    int readData;
    while((readData = in.read()) != -1){
		out.write(readData);		
    }
}

多字节复制(字节数组复制)

public void bytesArrayCopy(FileInputStream in, FileOutputStream out) throws IOException{
    byte[] bytes = new byte[1024];
    int readCount;
    while((readCount = in.read(bytes))!= -1){
        out.write(bytes);
    }
}

字符流

字符流专门操作文本文档

字符流的本质:字节流+编码表

字符输入流

抽象基类Reader

构造器
Modifier Constructor and Description
protected Reader() 创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。
protected Reader(Object lock) 创建一个新的字符流阅读器,其关键部分将在给定对象上同步。
成员方法
Modifier and Type Method and Description
abstract void close() 关闭流并释放与之相关联的任何系统资源。
void mark(int readAheadLimit) 标记流中的当前位置。
boolean markSupported() 告诉这个流是否支持mark()操作。
int read() 读一个字符
int read(char[] cbuf) 将字符读入数组。
abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
int read(CharBuffer target) 尝试将字符读入指定的字符缓冲区。
boolean ready() 告诉这个流是否准备好被读取。
void reset() 重置流。
long skip(long n) 跳过字符

具体子类

IntputStreamReader转换流

读取字节,并且可以通过指定的字符集来对字符进行解码,相当于字节流到字符流的桥梁,如果不指定字符集则采用默认字符集

构造器
Constructor and Description
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec) 创建一个使用给定字符集解码器的InputStreamReader。
InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。
成员方法
Modifier and Type Method and Description
void close() 关闭流并释放与之相关联的任何系统资源。
String getEncoding() 返回此流使用的字符编码的名称。
int read() 读一个字符
int read(char[] cbuf, int offset, int length) 将字符读入数组的一部分。
boolean ready() 告诉这个流是否准备好被读取。
FileReader简化流
构造器
Constructor and Description
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
FileReader(FileDescriptor fd) 创建一个新的 FileReader ,给定 FileDescriptor读取。
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。
BufferedReader
构造器
Constructor and Description
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。
成员方法
Modifier and Type Method and Description
void close() 关闭流并释放与之相关联的任何系统资源。
Stream<String> lines() 返回一个 Stream ,其元素是从这个 BufferedReader读取的行。
void mark(int readAheadLimit) 标记流中的当前位置。
boolean markSupported() 告诉这个流是否支持mark()操作。
int read() 读一个字符
int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
String readLine() 读一行文字。
boolean ready() 告诉这个流是否准备好被读取。
void reset() 将流重置为最近的标记。
long skip(long n) 跳过字符

字符输出流

抽象基类Writer

构造器
Modifier Constructor and Description
protected Writer() 创建一个新的人物流作家,其关键部分将在作者本身上同步。
protected Writer(Object lock) 创建一个新的字符流写入器,其关键部分将在给定对象上进行同步。
成员方法
Modifier and Type Method and Description
Writer append(char c) 将指定的字符附加到此作者。
Writer append(CharSequence csq) 将指定的字符序列附加到此作者。
Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列附加到此作者。
abstract void close() 关闭流,先刷新。
abstract void flush() 刷新流。
void write(char[] cbuf) 写入一个字符数组。
abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write(int c) 写一个字符
void write(String str) 写一个字符串
void write(String str, int off, int len) 写一个字符串的一部分。

具体子类

OutputStreamWriter
构造器
Constructor and Description
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs) 创建一个使用给定字符集的OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建一个使用给定字符集编码器的OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。
成员方法
Modifier and Type Method and Description
void close() 关闭流,先刷新。
void flush() 刷新流。
String getEncoding() 返回此流使用的字符编码的名称。
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write(int c) 写一个字符
void write(String str, int off, int len) 写一个字符串的一部分。
FileWriter
构造器
Constructor and Description
FileWriter(File file) 给一个File对象构造一个FileWriter对象。
FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象。
FileWriter(FileDescriptor fd) 构造与文件描述符关联的FileWriter对象。
FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。
FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
BufferedWriter
构造器
Constructor and Description
BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
成员方法
Modifier and Type Method and Description
void close() 关闭流,先刷新。
void flush() 刷新流。
void newLine() 写一行行分隔符。
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write(int c) 写一个字符
void write(String s, int off, int len) 写一个字符串的一部分。

其他流

数据流

DataInputStream数据输出流

数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入

构造器
Constructor and Description
DataInputStream(InputStream in) 创建使用指定的底层InputStream的DataInputStream。

DataOuputStream数据输出流

构造器
Constructor and Description
DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。

打印流

打印流没有输入流,只有字节输出和字符输出,输出时可以指定字符集输出

PrintStream字节打印流

构造器
Constructor and Description
PrintStream(File file) 使用指定的文件创建一个新的打印流,而不需要自动换行。
PrintStream(File file, String csn) 使用指定的文件和字符集创建新的打印流,而不需要自动换行。
PrintStream(OutputStream out) 创建一个新的打印流。
PrintStream(OutputStream out, boolean autoFlush) 创建一个新的打印流。
PrintStream(OutputStream out, boolean autoFlush, String encoding) 创建一个新的打印流。
PrintStream(String fileName) 使用指定的文件名创建新的打印流,无需自动换行。
PrintStream(String fileName, String csn) 创建一个新的打印流,不需要自动换行,具有指定的文件名和字符集。

PrintWriter

构造器
Constructor and Description
PrintWriter(File file) 使用指定的文件创建一个新的PrintWriter,而不需要自动的线路刷新。
PrintWriter(File file, String csn) 使用指定的文件和字符集创建一个新的PrintWriter,而不需要自动进行线条刷新。
PrintWriter(OutputStream out) 从现有的OutputStream创建一个新的PrintWriter,而不需要自动线路刷新。
PrintWriter(OutputStream out, boolean autoFlush) 从现有的OutputStream创建一个新的PrintWriter。
PrintWriter(String fileName) 使用指定的文件名创建一个新的PrintWriter,而不需要自动执行行刷新。
PrintWriter(String fileName, String csn) 使用指定的文件名和字符集创建一个新的PrintWriter,而不需要自动线路刷新。
PrintWriter(Writer out) 创建一个新的PrintWriter,没有自动线冲洗。
PrintWriter(Writer out, boolean autoFlush) 创建一个新的PrintWriter。

对象流

对象流可以把对象写入文档中,因此读取的时候也可以完全按着对象读出来而不用其他转换操作,因此很方便

ObjectOutputStream序列化流

构造器
Modifier Constructor and Description
protected ObjectOutputStream() 为完全重新实现ObjectOutputStream的子类提供一种方法,不必分配刚刚被ObjectOutputStream实现使用的私有数据。
ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream。

ObjectInputStream序列化流

构造器
Constructor and Description
ObjectInstance(ObjectName objectName, String className) 允许在给定对象名称和完整的类名称(包括包名称)的情况下创建对象实例。
ObjectInstance(String objectName, String className) 允许创建对象实例,并提供对象名称和完整类名称(包括包名称)的字符串表示形式。
posted @ 2021-04-25 15:20  瓜铺  阅读(67)  评论(0)    收藏  举报