如何快速的把文件每个字节乘4? ( 积分: 50 )

  • 主题发起人 主题发起人 bbcock
  • 开始时间 开始时间
B

bbcock

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个文件,我想从第10个字节开始后面每个字节的值都乘以4,变成新的文件,我用filestream对字节一个一个的操作速度太慢了,不知道有什么快速的办法没?
 
不考虑溢出和进位, 每个字节左移2位就等于乖4了
 
不知到你对文件是怎么处理的,对几十万个数据进行加工,也仅仅1~2秒的时间(受机器速度限制),我想之所以慢,是慢在读写上,做一个记录,里面放一个数组,一维的,Byte(字节)类型长度可以几千几万,或更大,做一个文件说明,一次性读出/写入,只是不知你的文件是否适应这种方式,如果不适应,可做一次加工,实时库也不过如此.
注:左移比乘法快!!
 
我用filestream对字节一个一个的操作速度太慢了
-----------------------
这样做的效率确实比较低,可以改进一下,定义一个缓冲区,先读数据到缓冲区,对缓冲区每字节左移两位后,再更新到文件,代码示例如下:
const
BUFFER_SIZE=1024*64;
var
buf:array[0..BUFFER_SIZE-1] of Byte;
nBytes:Integer;
I:Integer;
begin
with TFileStream.Create('C:/ABC.BMP',fmOpenReadWrite,fmShareDenyWrite) do
try
Position:=9;
while True do
begin
nBytes:=Read(buf[0],BUFFER_SIZE);
if nBytes=0 then Break;
for I:=0 to nBytes-1 do
buf:=buf shl 2;
Seek(-nBytes,soCurrent);
Write(buf[0],nBytes);
end;
finally
Free;
end;
end;
 
后退
顶部