Java高级[4]:输入输出流之字节流
1、一般在操作文件流时,不管是字节流还是字符流,都可以按照以下方式进行。
(1)使用File类找到一个文件,或创建一个文件;
(2)通过File类去实例化字节流或字符流类的子类;
(3)进行字节/字符的读、写操作;
(4)关闭文件流。
2、字节流中的两个顶层类为:InputStream(输入字节流)和OutputStream(输出字节流).
其下有两个子类FileInputStream(文件输入流)和FileOutputStream(文件输出流)。
1、InputStream类的一些方法:
int avaiable()
功能:返回当前可读的输入字节数
void close()
功能:关闭输入流
void mark(int numBytes)
功能:在输入流的当前点再放置一个标记,该流在读取N个bytes字节前都有效
int read()
功能:如果下一个字节可读则返回一个整型,遇到文件末尾是返回-1;
int read(byte buffer[])
功能:读取buffer.length个字节到buffer中,并返回实际成功读取的字节数,如果遇到文件末尾则返回-1;
int read(byte buffer[],int offset,int numBytes)
功能:试图读取buffer中从buffer[offset]开始的numBytes个字节,返回读取的实际字节数,如果遇到文件末尾则返回-1;
void reset()
功能:重新设置输入指针到先前设置的标志处;
long skip(long numBytes)
功能:忽略numBytes个字节,返回实际忽略的字节数
2、OutputStream类的一些方法:
void close()
功能:关闭输入流。关闭后的写操作会出现IOException
void flush()
功能:刷新缓冲区
void write(int b)
功能:向输出流写入单个字节。参数为整数,它允许不必把参数转换成字节数。
void write(byte buffer[])
功能:向一个输出流写一个完整的字节数组
void write(byte buffer[],int offset,int numBytes)
功能:写数组buffer以buffer[offset]为起点的numBytes个字节区域内的内容。
1、FileInputStream类(文件输入类):
其创建一个能从文件读取字节的InputStream类,常用构造方法是:
FileInputStream(String filepath);
FileInputStream(File fileObject);
2、FileOutputStream类(文件输出类):
其创建一个可以向文件写入的类OutputStream,常用构造方法是:
FileOutputStream(String filepath);
FileOutputStream(File fileObject);
FileOutputStream(String filepath,boolean append);
其中append为true时,表示向原文件追加写,即在文件的末尾处开始写。否则则从文件的开始处开始写。
3、在下面的图示中,我们展现了如何读取一个字节文件和写入一个字节文件。虽然是字节流,我们依然可以定义为文本文档。文件的读取及输出依然遵循:
先用InputStream或OutputStream类定义一个对象,再用其子类FileInputStream或FileOutputStream类进行实例化。然后进行文件读写操作,最后要关闭文件。
![Java高级[4]:输入输出流之字节流](https://exp-picture.cdn.bcebos.com/d695563104ebf6a7ee9d949fffee1c324a184f2a.jpg)