您的位置:首页 > 编程语言 > Java开发

java 流概念的理解

2015-08-05 10:05 351 查看
java 流概念的理解
一、“流”的概念

       “流”是一个抽象的概念,它是对输入输出设备的一种抽象理解,在java中,对数据的输入输出操作都是以“流”的方式进行的。“流”具有方向性,输入流、输出流是相对的。当程序需要从数据源中读入数据的时候就会开启一个输入流,相反,写出数据到某个数据源目的地的时候也会开启一个输出流。数据源可以是文件、内存或者网络等。

二、“流”的分类

       “流”序列中的数据可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种格式的特定数据,因此java中的“流”分为两种流:

1) 字节流:数据流中的最小的数据单元是字节,一次读入读出8位二进制;

2) 字符流:数据流中的最小的数据单元是字符,一次读入读出16位二进制,java中的字符是Unicode编码,一个字符占用两个字节。

三、“流”结构分类

      “流”存在与java.io包中,主要包含四种基本的类,InputStream、OutputStream、Reader及Writer类,它们分别处理字节流和字符流:

输入/输出

字节流

字符流

输入流

Inputstream

Reader

输出流

OutputStream

Writer

      

       它们之间的继承关系图为:

       字节流:

                                            

 
            

                                                                             输入流    

                                           

         

                                                                           输出流

       字符流:

                                            


                                                                           
输入流 

                                           


                                                                            输出流

四、“流”常用方法

         InputStream为字节输入流,本身是个抽象类,必须依靠其子类实现各种功能,数据单位位字节(8bit)。常用方法有:

       
(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。
   (2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的 
   (3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。 
   (4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用, 
   (5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 
   (6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭. 

         OutputStream为字节输出流,常用方法有:

    (1) public
void write(byte b[ ]):将参数b中的字节写到输出流。 
  (2) public void write(byte b[ ], int
off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 
  (3) public abstract void write(int
b) :先将int转换为byte类型,把低字节写入到输出流中。 
  (4) public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。 
  (5) public void close( ) : 关闭输出流并释放与流相关的系统资源。

          Reader为字符输入流,常用方法有:

       
(1)  public int read() throws IOException:
读取一个字符,返回值为读取的字符 

  

(2)  public int read(char cbuf[]) throws IOException:读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量
  

(3)  public abstract int read(char cbuf[],int off,int len) throws IOException:读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现。

          Writer为字符输出流,常用法有:

       
(1) public void write(int c) throws IOException:将整型值c的低16位写入输出流 
   (2)
public void write(char cbuf[]) throws IOException:将字符数组cbuf[]写入输出流 
   (3)
public abstract void write(char cbuf[],int off,int len) throws IOException:将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流 
   (4) public void write(String str) throws IOException:将字符串str中的字符写入输出流 
   (5)
public void write(String str,int off,int len) throws IOException:将字符串str 中从索引off开始处的len个字符写入输出流 
   (6) flush( )
:刷空输出流,并输出所有被缓存的字节。 
   (7) close()  :关闭流 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: