字节输入流提问

字节输入流提问

package com.zzh.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputDemo2 {

	public static void main(String[] args) {
		//文件拷贝
		try {
			FileInputStream fis=new FileInputStream("happy.jpg");
			FileOutputStream fos=new FileOutputStream("happycopy.jpg");
			int n=0;
			byte[] b=new byte[2048];
			while((n=fis.read(b))!=-1) {
				fos.write(b,0,n);
			}
			fis.close();
			fos.close();
			
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		

	}

}

fos.write(b,0,n);中 n每次都会变化吧,比如数组byte里面有1,2,3个数字
第一次n=0
fos写入1
fos变成1
第二次n=1
fos写入b,0,1的范围,就是写入1 2
fos变成1 1 2
第三次n=2
fos写入b,0,2的范围,就是写入1 2 3
fos变成1 1 2 1 2 3
提问:是这样理解的吗?write是递增还是覆盖?

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

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

2回答
好帮手慕小班 2021-08-23 11:20:58

同学你好,1、非常抱歉之前是老师并没有正确理解同学的意思,在write(b,0,n)方法写入的过程中,每次写入内容后,会有一个文件末尾标识,当需要写入新的内容时,会从前面的标识开始继续写入。

    ​2、这里的n是read方法的返回值,也就是每次读入数组b中的具体字节数量。

http://img1.sycdn.imooc.com//climg/6123130709b9bc5309090322.jpg

这里可以这样理解,每次通过read方法读取内容到数组b中,暂时将这些数据存入这个数组,然后调用write方法将内容写入新的文件中,然后循环再次读取,将新的内容读取到数组b中,循环执行。

祝学习愉快~

  • 提问者 做条咸鱼才最好 #1
    谢谢解答!文件末尾标识是write里面的吗?怎么保证每次都遵循接着上一次末尾后插入呢。
    2021-08-23 11:25:04
  • 提问者 做条咸鱼才最好 #2
    谢谢解答!文件末尾标识是write里面的吗?怎么保证每次都遵循接着上一次末尾后插入呢。
    2021-08-23 11:25:10
  • 提问者 做条咸鱼才最好 #3
    谢谢解答!文件末尾标识是write里面的吗?怎么保证每次都遵循接着上一次末尾后插入呢。
    2021-08-23 11:25:40
好帮手慕小班 2021-08-22 18:39:39

同学你好,同学的理解是正确的。

祝学习愉快~

  • 提问者 做条咸鱼才最好 #1

    不对吧  那这样我本来是想fos里面存1 2 3的,这样就变成了 1 1 2 1 2 3  啊  

    2021-08-22 23:53:46
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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