流(IO)
博客专区 > xili80 的博客 > 博客详情
流(IO)
xili80 发表于6个月前
流(IO)
  • 发表于 6个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

流的概念

流就是程序和设备之间嫁接起来的一根用于数据传输的管道,这个管道上有很多按钮,不同的按钮上有不同的功能。      这根管道就是流。

节点流:   也叫作原始流。     处理流: 也叫作包裹流。

四大基本抽象流

   InputStream和OutputStream 读写数据的单位是一个字节。

   Reader和Writer读写数据的单位是一个字符。

  Java中一个字符占两个字节,  凡是以stream结尾的都是字节流。

InputStream

 

InputStream流中常用的方法

       public   int read()    throw  IOException

              读取一个字节并以整数的形式返回。

              如果读取到输入流的末尾则返回-1。

       public int read  (byte[] b)  throw IOException

              从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。以整数的形式返回实际读取的字节数。

              如果b的长度为0, 则不读取任何字节并返回0; 如果流位于文件末尾而没有可用的字节,则返回-1。

        eg:     FileInputStream   fs   = new  FileInputStream(:"d:\\ share\\xuexi.txt"); 

                  len = fis.read(buf);   //   从fis流所关联的d:\\share\\xuexi.txt 文件中读取数据,并将读取出来的数据写入buf数组中,返回值是实际写入buf数组的字节个数,如果读到文件的结尾则返回-1。 

        public   int  read (byte[] b,  int  off,   int len)   throws  IOException             

                 从输入流中最多读取len个字节的数据并存入byte数组中。

                 b表示读取的数据要存入的数组的名字  。

                 off 表示第一个读取的数据要存入的位置,是下标。

                  len表示最多能读取的字节数。

                将输入流所关联到的设备中读取的第一个字节存储在元素b[off]中,下一个字节存储到到b[off+1]中,以此类推。读取的字节数最多等于 len。

                尝试读取len个字节,但读取的字节也可能小于该值,以整数的形式返回实际读取的字节数。

                 如果读到了文件的末尾,则返回-1。

        void  close()    throws   IOException

                 关闭此输入流并且释放与该流关联的所有系统资源。

        long  skip(long n)   throws  IOException 

                跳过和丢弃此输入流中数据的n个字节  (这个很少用)


OutputStream 

     

 

Reader

 

Writer

 

缓冲流

         缓冲流概述:  缓冲流就是带有缓冲区的输入输出流。

         缓冲流可以显著的减少我们对IO访问次数,保护我们的硬盘。

         缓冲流本身就是处理流,缓冲流必须得依附于节点流。

 

转换流

OutputStreamWriter 流是把OutputStream 流转化成Writer 的流

InputStreamReader 流是把 InputStream 转化成 Reader 

OutputStreamWriter  和 InputStreamReader 流都是处理流(包裹在节点流之上的流)

数据流

DataOutputStream 是处理流 ,必须依附于OutputStream.

 

print流

      PrintStream在OutputStream基础之上提供了增强的功能。既可以方便的输入各种类型的数据(不仅限于byte型)的格式化表示。

     PrintStream 重载了Print和Println方法,用于各种不同类型数据的格式化输出。

     格式化输出指的是将一个数据用其字符串格式输出。

     DataOutputStream 中的writeXXX(data) 方法是把data咋内存中的二进制数据写入文件。

    PrintStream中的 Println(data) 写出的是该数据格式化后的字符串。

 

object流(对象的序列化)

       对象的序列化指的是:把一个Object对象直接转化成字节流,然后把这个字节流直接写入本地硬盘或者网络中。

       如果想要把某个对象序列化,就必须实现Serializable接口。

       Serializable接口中并没有任何的方法,该接口被称为标记接口,如果一个类实现了Serializable 接口,潜在的含义就是告诉编译器这个类是允许被序列化的。

        在Java中  transient 修饰的成员变量在对象序列化时不被序列化。

            eg: transient    public int = 4;   //   表示 sscore 成员不能被序列化,所谓不能被序列化就是指:该成员调用ObjectOutputStream 的 writeObject() 时不会被保存,调用 ObjectInputStream的readObject()方法时不会被读取。

            

总结 

               

 

 

 

      

 

共有 人打赏支持
粉丝 0
博文 9
码字总数 74390
×
xili80
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: