小弟个人对IO的字符流的看法

   今天回顾了下黑马毕老师的IO视频。 的确不错。 下面我将对IO的理解仔细理清下。 写个总结。

    java IO主要是处理数据方面的   硬盘 网络。内存。  IO可分为字节流和字符流。 然后细分下。还能分为输入流和输出流。

   这幅图很好的全是了IO基础的核心脉络


小弟个人对IO的字符流的看法_第1张图片

   这幅图说明。 字符流的2个基类就是reader wirter 所有的字符流读写都是继承了这2个基类。  当然。 他们是抽象的。

   先说说字符流

      Reader 是个抽象类。 里面有抽象方法read() 和Close() 所以子类都实现了这2个方法。

 先说说fileReader这个类, 这个类是继承了inputstreamreader类。  inputstreamReader是个转换流。字节流到字符流。这里先不套路。 inoutstreamReader又继承了Reader抽象类。 所以fileReader实现了Reader类中的read()和Cloase()方法, read()是读取数据, close()是为了关闭系统的资源。

 先看一段代码 

   小弟个人对IO的字符流的看法_第2张图片

   这段代码。我读取一个文件为dome.txt

 dome.txt的数据就是"wz" 这2个字符, 运行后。 控制台结果显示为119 ,为啥会是119的数字。 因为b是int类型。 此时把w转为成int类型。 不信我可以转 成char看下。

小弟个人对IO的字符流的看法_第3张图片

  结果证明为w。  当然。 回顾下。 read方法。 从java jdk看出。 read返回是int类型的。    如果往后面读取如果读不到了。 就会返回个-1.代表数据读了。

  这样可以用代码证实下小弟个人对IO的字符流的看法_第4张图片

   发现当我读取到最后一个数据的时候。返回-1了。 其实-1就是读取末尾的标志.read()方法有许多重载函数, 具体可以去查API 很简单的。

     是不是觉得filereadr很简单。 读取数据就完了。 不过如果按照上面写。 似乎不能满足我们太多的要求。 如果此时, 里面有100个字符。 你就打算去read()次吗? 这样肯定是错的, 但有的会提出。 可以用while循环判断啊。 判断是否为-1. 如果为-1就不读了。 这样的确能实现 。 但有点。 程序就是为了加快运算而出现的。 所以此时可以用到缓冲区。小弟个人对IO的字符流的看法_第5张图片

    我把代码改了下 这时候用数组去读取。 其实数组就是缓冲区。 这时候读取就是读取一管数据。  这样就提高了效率。 结果我也答应了。 不过有一点。 声明缓冲区的大小最好是1024的倍数。毕老师是这样说的。 我也不知道为何。  这就是filereader。

  缓冲区讲过了。 但这是我们自己写的缓冲区。 其实java早已为我们准备好了缓冲区。 就如第一幅体系图中那样。buffreader。 bufferreader顾名思义就是缓冲字符.

  关于bufferreader可以去看下java Jdk文档 很详细 ,接下来我把代码改了下。 改成了用buffread去读取。发现会有个readline方法。 readline方法表示读取一行数据,小弟个人对IO的字符流的看法_第6张图片

  读取到末尾不为null位置。 这样就把所有的数据都读取出来了。 缓冲区的出现是因为流存在而出现的。 为了r高效的读取而出现了缓冲区s

   其实bufferdreader类的read有3个重载方法 read()      read(char[])     ,read(char[],int off,int len);     代表什么意思去查java jdk文档就知道了。 很简单

 readline是读取一行。 读到末尾为null就返回不在读取了, 其实里面还有几个方法。 skip(int )跳过第一个字符去读.mark(int )标记当前的位置。这里就不一一解释了。


   inputstreamreader.        这个类的意思就是字节流转为字符流    这个类我牵扯到字节流。 我到后面会讲到

  fileWrite     把数据写到硬盘上

     如果一个已有的文件存在。 你想进行写入。 就需要这个类  这个类构造函数有几种。 fileWrite(filename); fileWrite(filename,boolean); fileWrite(File,boolean);

  fileWrite(File); 依次代表着文件。 文件和是否追加内容,文件对象和文件对象 是否追加内容 , 追加内容就是是否去覆盖原有的内容 如果不覆盖那么就追加内容

   fileWirte有个wirte()方法。 把数据写到文件中,   还有个append方法。 都是写入文件。 

  如果写入数据  就和读取数据一样。 不过写了要进行flush, 如果不刷新流。 那么数据无法写到文件中去。 就和tx文件一样。 写了不保存也无法添加到文件中去。

 close是关闭系统资源, 关闭资源后是无法续写内容。 

  字符流。 就差不多这样写了 其实写和读一样。 思想概念一样。 搞懂了读。 写也会了。



   


你可能感兴趣的:(小弟个人对IO的字符流的看法)