【Java学习】IO流 read( )原理困惑

时间:2022-01-24
本文章向大家介绍【Java学习】IO流 read( )原理困惑,主要包括【Java学习】IO流 read( )原理困惑使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在学习IO流读写文件时不清楚这个while循环存在的必要。

误以为read是把路径文件中的内容传入b中 再输出  输出的内容多少有数组长度决定 于是便有了第一张图。

随着内容改变  数组内的值需要不断变化。就很麻烦 于是


 查阅api发现 数组时决定最多读取数目的。

那我直接改大了 不久能读到下边的数字吗?  

困惑之际 发现了六年前的知乎问题

 豁然开朗

try {
            FileInputStream in = new FileInputStream("E:\\java-selfLearning\\IO\\FileTest.txt");
            //字节流
            byte[] b = new byte[10];//设置一个比特数组接收文件内容
            in.read(b);//这个方法有一个返回值  返回值是读取的数据的长度。
            int len = 0;


            while ((len = in.read(b)) != -1) {
                System.out.println(new String(b,0,len ));

            }
            in.close();//流在使用后要关闭


        }

read(b [ i ])

i  决定了一次能读到的数目

b 读取数据的缓冲区  换句话说 接收数据即文件内容

return b的长度  或者 文件到达末尾 返回-1

假设i = 10;

第一次读10个 并把1-10个字节的内容传给b[ ]    返回10   len = 10      != -1成立  输出b[0 - 9] 的内容

第二次读10个 并把11-20个字节的内容传给b[ ]   返回10   len = 10     !=-1 成立  输出 b[0 - 9] 的内容  此时的 b 已经赋了11-20的内容

重复上列操作   

直到read 返回-1  结束循环。

这样就不会需要总是改变b数组的大小  就能把所有内容读出来


什么弱智问题 服了我自己了

写起来都觉得弱智  不就是一个循环吗

原文地址:https://www.cnblogs.com/Atooooooooon/p/15840757.html