IO流作用:用来处理设备间的数据传输。
Java对数据的操作是通过流的方式。
流按操作类型分为两种:
* 字节流:可操作任何类型的数据,因为在计算机中任何类型的数据都是以字节形式存储的。
* 字符流:只能操作纯字符数据,比较方便。
字节流抽象父类:InputStream OutputStream
字符流抽象父类:Reader Writer
FileInputStream类:InputStream子类。
int read():从该输入流中读取一个字节的数据,每次读取指针向后移。
*(面试):read()方法读的是一个字节,为什么返回的却是int 类型而不是byte类型呢?
字节输入流可操作任意类型的数据,对于音频,图片,视频等类型的文件底层都是以二进制数据存储的。如果返回的是byte类型,有可能在读到中间时遇到 11111111。这就是byte类型的-1,然而程序在读到-1时就结束读取了。后面的数据就没有读取到。所以读取时用int类型接收。
int available():返回一个文件的所有字节数。
int read(byte []arr) :每次最多能读取arr数组长度的字节数。
FileOutputStream:OutputStream子类。
void write(int b):将指定字节写入文件输出流中。虽然写入的是一个int数,但最终到文件上的是一个字节。会自动去掉前三个8位。
FileOutputStream在创建对象的时候,所关联的文件如果没有会自动创建。
构造方法: FileOutputStream(String name,boolean bol) 如果想要在文件中续写内容而不是覆盖文件之前的内容,第二个参数就设置为true.
字符流可拷贝文件,但不推荐使用。因为在读取时会把字节流转换为字符流。在写出时把字符流又转换为字节流。
字符流不能拷贝非纯文本文件,因为在转换过程中有可能找不到对应的码表值。