基本概念
节点流与处理流
按照流是否直接与特定的地方(如磁盘、内存、设备等)
相连,分为节点流和处理流两类。
- 节点流:可以从或向一个特定的地方(节点)读写数据。
- 处理流:是对一个已存在的流的连接和封装,通过所封 装的流的功能调用实现数据读写。
处理流的构造方法总是要带一个其他的流对象做参数。
个流对象经过其他流的多次包装,称为流的链接。
通常节点流也称为低级流。
通常处理流也称为高级流或过滤流。
IS和OS常用方法
- InputStream是所有字节输入流的父类, 其定义了基础的读取方法,常用的方法如下:
int read0
读取一个字节
以int形式返回该int值的”低八位”有效,若返回值为-1则表示EOF
int read(byte[] d)
尝试最多读取给定数组的length个字节并存入该数组, 返回值为实际读取到的字节量。 - OutputStream是所有字节输出流的父类,其定义了基础的写出方法,常用的方法如下:
void write(int d)
写出一个字节,写的是给定的int的”低八位”
void write(byte[] d)
将给定的字节数组中的所有字节全部写出
java I0(input, output)
输入与输出
I0是我们的程序与外界交换数据的方式。
java提供了一种统一的标准的方式与外界交换数据
java将流按照功能划分为读和写,并用不同的方向来表示
其中输入流(外界到程序的方向)用于读取数据
输出流用于写出数据
java将流划分为两大类: 节点流,处理流
节点流:
也称为低级流,是实际链接程序与数据源的"管道",负责实际搬运数据。读写一定是建立在节点流的基础上进行的。
处理流:
也称为高级流,不能独立存在,必须链接在其他流上,目的是当数据流经当前流时对这些数据做某些处理,这样可以简化我们对数据的操作
- 实际应用中,我们是链接若干高级流,并最终链接低级流,通过低级流读写数据,通过高级流对读写的数据进行某些加工处理,完成-一个复杂的读写操作。这个过程称为"流链接"。这也是学习I0的精髓所在。|
文件流
文件流是一对低级流,用于读写文件。就功能而言,它们与RandomAccessFile致。但是底层的读写方式有本质区别。
RAF是基于指针进行读写的,可任意读写文件指定位置的数据。可以做到对文件部分数据的编辑操作。
流是顺序读写方式,所以不能做到任意读写指定位置数据,对此也无法做到对文件数据进行编辑的操作。但是配合高级流,可以更轻松的读写数据。
package io;
import java.io.FileOutputStream;
/**
* 写文件
* 使用文件流向文件写出字节
* FileOutputStream常见构造方法:
* FileOutputStream(String path)
* FileOutputStream(File file)
* 以上两种方式创建时,默认为覆盖写操作,即:若创建时该
* 文件已存在,会先将该文件所有数据清除。然后将通过
* 当前流写出的内容作为该文件数据。
*
* FileOutputStream(String path,boolean append)
* FileOutputStream(File file,boolean append)
* 追加写模式,即:若指定文件存在,那么数据全保留,通过该流写出的
* 数据会加到文本末尾
*
* @author 13651
*
*/
public class FosDemo{
public static void main(String[] args) throws Throwable {
FileOutputStream fos = new FileOutputStream("fos.txt",true);
String line = "一起学猫叫";
//转换为二进制
byte[] data = line.getBytes("UTF-8");
fos.write(data);
System.out.println("写出完毕!");
fos.close();
}
}