在变量、数组、对象中储存的数据是暂时存在的,在程序结束之后它们就会消失。为了能够永久地保存程序创建的数据,需要将其保存在磁盘文件中,这样就可以在其他程序中使用他们
本次简单总结Java的I/O输入流和输出流
目录
流的概念
流是一组有序的数据序列,根据操作的类型,可以分为输入流和输出流两种。I/O(Input/Output)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。输入流是程序从指向源的输入流中读取源中的数据,可以是文件、网络、压缩包等。输出流的指向是数据要到达的目的地,程序通过想输出流中写入数据把信息传递到目的地。
输入流
InputStream类是字节输入流的抽象类,是所有字节输入流的父类,该类中所有方法遇到错误时都会引发IOException异常。下面是对该类中的一些方法的简要说明。
read() | 从输入流中读取的下一个字节。返回0~255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回值为-1 |
read(byte[] b) | 从输入流中读入一定长度的字节,并以整数的形式返回字节数 |
mark(int readlimit) | 在输入流的当前位置放置一个标记,readlimit参数告知此输入流标记的位置失效之前允许读取的字节数 |
reset() | 将输入指针返回到当前所做的标记处 |
skip(long n) | 跳过输入流上的n个字节并返回实际跳过的字节数 |
markSupported() | 如果当前流文件支持mark()/reset()操作就返回ture |
close | 关闭此输入流并释放与该流关联的所有系统资源 |
并不是所有InputStream类的子类都支持InputStream中定义的所有方法,如skip()、mark()、reset()等方法只对某些子类有用。
小结:
Java标准库的java.io.InputStream
定义了所有输入流的超类:
FileInputStream
实现了文件流输入;ByteArrayInputStream
在内存中模拟一个字节流输入。
总是使用try(resource)
来保证InputStream
正确关闭。
输出流
OutputStream是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。此类中多有的方法均返回void,在遇到错误时会引发IOException异常。
write(int b) | 将指定字节写入此输出流 |
write(byte[] b) | 将b个字节从指定的byte流数组写入此输出流 |
write(byte[] b,int off,int len) | 将指定byte数组中偏移量off开始的len个字节写入到此输出流 |
flush() | 彻底完成输出并清空缓存区 |
close() | 关闭输出流 |
小结:
Java标准库的java.io.OutputStream
定义了所有输出流的超类:
-
FileOutputStream
实现了文件流输出; -
ByteArrayOutputStream
在内存中模拟一个字节流输出。
某些情况下需要手动调用OutputStream
的flush()
方法来强制输出缓冲区。
总是使用try(resource)
来保证OutputStream
正确关闭。