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接口没有任何的方法,只是作为了对象串行化的一种标志。

 

posted on 2013-04-01 20:34  小牧童的天空  阅读(297)  评论(0编辑  收藏  举报