java输入输出流
java的java.io包提供了大量的流类。
一,java输入输出流的分类:
1.按流的方向分为:输入流和输出流
2.按流的数据单位不同分为:字节流和字符流
二,java把InputStream抽象类的儿子类创建的对象作为字节输入流,OutputStream抽象类的子类创建的对象作为字节输出流;java把Reader抽象类的子类创建的对象作为字符输入流,Writer抽象类的子类创建的对象作为字符输出流。
InputStream,OutputStream,Reader,Writer就是java输入输出流的四大抽象类。
三, InputStream的基本方法:
int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾,该类的子类都继承了它的read方法,该方法的特点就是一字节为单位顺序地读取源中的数据。
void close() throws IOException 关闭流释放内存资源
long skip(long n) throws IOException 跳过n个字节不读
四,OutputStream的基本方法
void write(int b) throws IOException 向输出流写入一个字节数据,该类的子类都继承了它的write方法,该方法的特点就是以字节为单位顺序地向目的文件中写入数据。
void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地
五,Writer的基本方法:
void write(int c) throws IOException 向输出流写入一个字符数据
void write(String str) throws IOException将一个字符串中的字符写入到输出流
void write(String str,int offset,int length)
将一个字符串从offset开始的length个字符写入到输出流
void flush() throws IOException
将输出流中缓冲的数据全部写出到目的地
六,Reader的基本方法
int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾
七,文件字节流:
因为应用程序经常需要和文件打交道,因此InputStream提供了读写文件的子类:
FileInputStream类和FileOutputStream类.
如果程序对文件的操作比较简单,比如只是顺序的读写文件,那么就可以使用这两个类来创建的流对文件进行读写操作。
文件字节输入流是从InputStream输入流中派生出来的一个子类。
创建FileInputStream对象的两种方式:
方式1. FileInputStream fis=new FileInputStream(“hello.txt”);
方式2. File f=new File(“hello.txt”);
FileInputStream fis=new FileInputStream(f);
第一种方式简单,第二种方式在创建FileInputStream对象之前,可以通过File的相关方法来查看文件的相关信息。
文件字节输出流是OutputStream输出流中派生出来的一个子类。
八,文件字符流
Reader类和Writer类:所有字符流类的抽象基类,用于简化对字符的输入输出编程。字符输入流和字符输出流中的read和write方法是以字符为基本的单位来处理数据。
FileReader和FileWriter是相对应的文件字符输入流和文件字符输出流。分别调用其中的read和write方法就会顺序地读或写文件。直到流被关闭。
九,两个重要的方法
flush:刷新该流的缓冲。将缓冲区清空,内容进入文件。
close:关闭流资源,但要先刷新。将数据送入文件。
十,缓冲流
缓冲流要套接到相应的节点流上,提高了读写的效率。
此处理流的构造方法都得传相对应的基类类型
BufferedReader:提供了readLine方法用于高校读取一行字符串
BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行
提高了对数据的读写效率。创建缓冲区之前需要先创建流对象。
使用:将需要提高效率的流对象作为参数传递给缓冲区的构造函数即可。
注意:只要用到缓冲区,就要记得刷新。
关闭缓冲区,就是在关闭缓冲区中的流对象。
newline():提供了一个跨平台的换行操作:
字符流读取流缓冲区:该缓冲区提供了一个一次读一行的方法:readline,方便与对于文本数据的获取。返回时候只返回回车符之前的数据内容,并不返回回车符。当返回空时候,表示独到文件末尾。
BufferedInputStream
BufferedOutputStream
十一,PipedInputStream类和PipedOutputStream类
管道流类,主要用于线程之间的管道通信。线程的PipedInputStream对象可以与另一个线程的PipedOutputStream连接从而获取PipedOutputStream中的数据。就好像把线程的输入接口和另一个线程的输出接口插到了一起,另一个线程就可以给此线程传输数据。
十二,PipedReader类和PipedWriter类
使用字符流来传输数据,主要用于需要传输字符数据的情况。使用管道流类可以实现各个程序模块的松耦合通信。所谓的松耦合就是各个模块之间联系很少,一个模块的改变不影响其他的模块。模块之间的联系由专门的程序来完成,要改变各个模块之间的联系关系,只需要修改这些程序就可以了。
十三,转换流
转换流的主要作用就是字节流转换成字符流
转换流在构造时可以指定其编码集合
InputStreamReader需要和InputStream套接
OutputStreamWriter需要和OutputStream套接
十四,对象流
ObjectInputStream类和ObjectOutputStream类
用于处理对象的输入和输出,输出对象时输出对象的所有成员变量,不包括static transient static为类的变量,不属于某个对象,transient只是临时的变量,不作为对象的特征。对象必须实现serializable接口,serializable接口没有任何的方法,只是作为了对象串行化的一种标志。