为了账号安全,请及时绑定邮箱和手机立即绑定

关于三种copy方法的理解

第一个:单字节读取,每次读取一个字节,紧接着就写入这个字节;

第二个:缓冲读取,我的理解也是,单字节读取,不过先读取到缓冲区,缓冲区满了之后,一次性写入;

第三个:批量读取,一次性读取一个数组的字节,然后写入;

这么说,缓冲读取和批量读取,应该速度差不多啊,还是说读取的速度的原因,大家讨论一下。

正在回答

2 回答

这点说的我也有些晕。我理解是:一共有A(源文件)、B(程序)、C(目标文件)三个桶,A装满了水,B、C都是空的,要把A的水通过B桶全部转移到C桶。

单字节:一瓢一瓢从A舀水到B桶,再从B桶一瓢瓢舀水到C桶;

缓冲读取:一瓢一瓢从A舀水到B桶,将B桶水直接倒入C桶;比单字节快一点;

批量读取:直接从A桶倒水进B桶,再从B桶倒水进C桶;最快。

从最后性能对比看,应该是这样的,老师解释的时候没有把B桶说太明确。

2 回复 有任何疑惑可以回复我~
#1

bryan4it 提问者

非常感谢!
2016-02-14 回复 有任何疑惑可以回复我~
#2

梁XX

缓冲读取的原理上有点异议,不过补充得很好。
2016-02-20 回复 有任何疑惑可以回复我~
#3

怒放的生命012 回复 梁XX

缓冲不是不经过B桶么??就像字符串中的缓冲,直接在栈中操作,而不用在在堆中操作了?????是么
2016-07-01 回复 有任何疑惑可以回复我~

这个问题首先要明白,读取和写入的过程;

知道运行内存吧???计算机为什么要运行内存呢???其实运行内存就是一个缓冲区!!

文件的读取和写入操作的过程是这样的:

(1)首先说一下批量读取和单个字节的读取

批量读取是new一个对象,new一个对象就是在内存中申请一个和new的要求的大小相一致的运行内存;

单个读取系统默认申请了一个字节的运行内存;

(2)文件的读取和写入

 1.先说单个字节的读取,从原文件中读取一个字节放入到内存中,再从内存中把一个字节大小的数据放入到目标文件中;(强调一次操作必须是直接从源文件到内存再到目标文件, 才能再次读取下个字节)

2.再说批量读取,同理

从原文件中读取多个字节放入到内存中,再从内存中把多个字节大小的数据放入到目标文件中;(强调一次操作必须是直接从源文件到内存再到目标文件, 才能再次读取下多字节)

(3)从2中我们就能理解Buffer的运行机制了,开始解释(再强调一下运存既是缓存区)

buffer的单个读取,同理读取既是先读取一个字节放入内存中,在读取一个字节中,直到读取完整个文件,批量从缓存中放到目标文件中,可以看粗这样节省了一次一次的从内存中到目标文件的过程即(1——》2——》3变成了1——》3,这样从需要花费2步,变成只花费了一步,所以buffer的性能应该是正常的一倍)

buffer的批量读取,同理读取既是先读取多个字节放入内存中,在读取多个字节中,直到读取完整个文件,批量从缓存中放到目标文件中,可以看粗这样节省了一次一次的从内存中到目标文件的过程即(1——》2——》3变成了1——》3,这样从需要花费2步,变成只花费了一步,所以buffer的性能应该是正常的一倍)

(4)总结,累死我了,以上内容纯属自己瞎想,没有验证,求大神验证,告诉我答案,

    我是渣渣,我是新手,验证发现我说的错了,请不要骂我,xiexie


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于三种copy方法的理解

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信