输入输出流巩固理解

来源:互联网 发布:江南大学网络教育报名 编辑:程序博客网 时间:2024/04/28 13:27

为什么要巩固?值得一提的是输出在输入的配合,在输入中中,这个是指定文件,指定开始输入的下标,指定读取多少个。在输出中,也是一样,怎么个配合法?


一边输入读取,输出进行输出,什么意思,可用做到拷贝的效果,在file中有个改名的方法renameTo(),也是改路径,可用做到剪切的效果,把文件剪切走,而输入输出的配置,可用做到拷贝的效果。


一个文件是由头和内容组成,在计算机中只存储0和1,一个字节是八位,我们通过byte来读取文件,把文件的读一些,在输出一些,直到读取完毕,输出也就完毕,只要中途没有什么修改字节的操作。是可执行的。


怎么操作呢?输入和输出都是一样的,read(bye[],int,int),对文件来说,int是指定了那个位置读,读取多长来填充我的数组,write(byte[],int,int)对拷贝的新文件来说,byte[]就是数据源,it就是重这个数组多少位开始读,int读取多长。所以read读取多长,byte就可用输出多长。


read()读取了的就不会在读取,再一次调用read即使从之前的位置继续读取,除非在指定从哪里继续读取,wtite();对自己文件的输入是存在覆盖和追加两种情况,用true和false说明,在拷贝的时候,也是这种,把读取到的值,往后加。


你会问,不是说覆盖吗?怎么又变成往后加了,没错,确实在覆盖,但这是争对于每次程序运行来说,在每一次程序运行过程中,是不会存在覆盖,而是程序运行完毕后,再次运行,对比上一次,没有往后加而是覆盖。


所以这个加和覆盖是争对于每次程序运行时而定的,怎么判断读取是否结束?-1来判断,读取时候,不论是read(),还是read(byte[])返回-1即结束,


我觉得InputStream,read(byte[],int,int)不常用,因为定制位置来说麻烦,这样当然或许有这样特定的需求,不过没有read(bytr[])频繁,


我觉得OutputStream的wtite(byte[])不常用,因为读取在最后的时候是不会那么满的,就是会稍比申请的数组长度少一些,读到最后,所以需要wtite(vyte[],int,int)来定制,读取一点,我就给你取出这么多走,到最后即使你少一点,你读取多少,我给你带走多少。


因为你没有读取完返回的是即是读取长度,根据这长度可以知道,你最后少的时候,是读不够的,这个时候read(byte[])返回的即使读取了多少长度,在根据这个长度去输出。


一句话就是:输入:read(byte[]),输出:wtite(byte[],int,int),比较常用,输入输出配套,可做到拷贝的效果,因为你把整个文件的位,字节八位读取,都读取到了,同时又根据指定的内容一个个字节的输出。就相等于拷贝了。

原创粉丝点击