介绍
在Java的I/O类库中,总共有4种类型的操作。其中java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流。在这里,只介绍字节流的概念和操作。其他I/O流的概念请参考Java IO 工作机制。
InputStream中的读取数据的方法
序号 | 方法名 | 描述 |
---|---|---|
1 | int read() | 从输入流中读取数据的下一个字节。 |
2 | int read(byte[] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 |
3 | int read(byte[] b, int off, int len) | 将输入流中最多 len 个数据字节读入 byte 数组。 |
4 | int available() | 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。 |
5 | void mark(int readlimit) | 在此输入流中标记当前的位置。 |
6 | void close() | 关闭此输入流并释放与该流关联的所有系统资源。 |
方法的详细信息请参考API。
InputStream代码演示
字节数组输入流ByteArrayInputStream
1 | public static void main(String[] args) throws IOException { |
输出结果为:A B C D E F G
文件输入流FileInputStream代码演示
首先新建一个txt文件夹,里面写入abcdefg。然后利用如下代码:
1 | public static void main(String[] args) throws IOException { |
结果为:A B C D E F G
这里我们只简单介绍常用的两种输入流,其他输入流的概念较为复杂,这里就不多说。
OutputStream中的写入数据的方法
序号 | 方法名 | 描述 |
---|---|---|
1 | void close() | 关闭此输出流并释放与此流有关的所有系统资源。 |
2 | void flush() | 刷新此输出流并强制写出所有缓冲的输出字节。 |
3 | void write(byte[] b) | 将 b.length 个字节从指定的 byte 数组写入此输出流。 |
4 | void write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
5 | abstract void write(int b) | 将指定的字节写入此输出流。 |
方法的详细信息请参考API。
OutputStream代码演示
字节数组输出流ByteArrayOutputStreamd代码演示
1 | public static void main(String[] args) throws IOException { |
输出结果为:test OutputStream
文件输出流FileInputStream代码演示
1 | public static void main(String[] args) throws IOException { |
查看文件,可以发现文件内容增加了test OutputStream内容。
最后我们可以发现,大部分字节输入流输出流的操作原理基本一致,只要掌握好各种基本类型的操作,理解其父类InputStream和OutputStream的常用方法,问题就能得到解决。