这个地方byte数字长度写死的是100,可以根据文件内容大小,自动生成数组长度吗?

这个地方byte数字长度写死的是100,可以根据文件内容大小,自动生成数组长度吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2022-04-13 10:31:55

同学你好,数组的长度并不是固定为100或自动生成的,而是由用户自定义的。

祝学习愉快~

  • 提问者 王小east #1

    是的,用户自己定义然后写死在代码中,这个数组长度能自动根据要读取的文件大小系统自己动态调整吗?还是说只能是用户定义多少就是多少呢?

    2022-04-13 22:18:55
  • 提问者 王小east #2

    在不知道要读取文件大小的情况下,这个数组长度又改如何定义呢?

    2022-04-13 22:20:09
  • 好帮手慕小小 回复 提问者 王小east #3

    同学你好,此数组的长度表示的是从该输入流读取最多b.length字节的数据到字节数组。是为了提高读取效率。默认情况下的read()方法是只能从输入流中读取一个字节长度的数据,使用了read(byte[] b)提高了每次从输入流中读取的字节数量,进而提高了读取效率。该字节数组并不是只能使用一次便不可再使用了,而是可以利用循环对文件反复对字节数组进行操作。

    https://img1.sycdn.imooc.com//climg/62577fe00916a4ec09170259.jpg

    例如:

    public void testFileInputOutputStream() {
    	FileInputStream fis = null;
    	FileOutputStream fos = null;
    	try {
    		// 1.造文件
    		File srcFile = new File("imooc.txt");
    		File destFile = new File("imooc_copy.txt");
    
    		// 2.造流
    		fis = new FileInputStream(srcFile);
    		fos = new FileOutputStream(destFile);
    
    		// 3.复制的过程
    		byte[] buffer = new byte[5];//长度可自定义
    		int len;
    		while ((len = fis.read(buffer)) != -1) {
    			fos.write(buffer, 0, len);
    		}
    	} catch (IOException e) {
    		e.printStackTrace();
    	} finally {
    		if (fos != null) {
    			// 4.关闭流
    			try {
    				fos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    		if (fis != null) {
    			try {
    				fis.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    
    		}
    	}
    
    }

    祝学习愉快~

    2022-04-14 10:33:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师