oryStream;
lCompressionStream: TCompressStream;
begin
StreamIncise := TStreamIncise.Create;
lStream := TMemoryStream.Create;
lCompressionStream := TCompressStream.Create;
StreamIncise.LoadFromStream(FStream);
StreamIncise.SetStreamDefault;
try
for I := 0 to StreamIncise.IncisedCount - 1 do
begin
StreamIncise.GetInciseStream(lStream); //获得分割流
ClientDataSet2.Append;
ClientDataSet2.FieldByName(''''F_ID'''').Value := I; //取序列号
ClientDataSet2.FieldByName(''''F_NAME'''').Value := FFileFullName;
ClientDataSet2.FieldByName(''''F_SERIAL'''').Value := I; // 取每次分割的序列号
lCompressionStream.CompressStream(lStream);
(ClientDataSet2.FieldByName(''''F_BINARY_DATA'''')
as TBlobField).LoadFromStream(lStream);
ClientDataSet2.Post;
end;
finally
StreamIncise.Free;
lStream.Free;
lCompressionStream.Free;
end;
end;
最后我们增加了InciseSize 属性,让程序员在创建类以后可以自己修改分割块的大小。
通过这样的调用,我们就可以把分割类具体的保存业务的耦合解开,从而增加了分割类下次被重用的可能性。在查阅资料过程中我们也找到一些分割的例子,只是都跟具体的业务耦合得很紧密,要重用该代码除了粘贴复制以外基本上没有他法。
这样当迭代3完成的时候我们实现了对了流的分割压缩,文件分割存储用例到这里获得一个好的解决方案,通过小步的迭代前进我们可以在每一次迭代结束的时候获得可以使用的功能代码,剩下来就使考虑图档文件的格式问题了。其实更主要的通过这次开发我们让新加入的组员获得了一次很好的编程培训,更容易理解要实现一个功能的具体思路和步骤。
上一页 [1] [2] [3] 没有相关教程
|