/// <summary> /// 以分块的方式对流进行循环地操作 /// </summary> /// <param name="inputSteam">输入的流</param> /// <param name="operateStreamEnventHandler">对流分块后,可以调用的具体的操作方法</param> /// <param name="callBackObject">操作方法operateStreamEnventHandler内部可以使用的回调对象(即可以让调用本分方法的客户端程序,传递一个对象给operateStreamEnventHandler)</param> public static void BlocklyCircularlyOperateStream(Stream inputSteam, OperateStreamEnventHandler operateStreamEnventHandler, object callBackObject) { long streamLength = inputSteam.Length; int size = 10240;//10K一--10K为1块,每次读取10k byte[] bytesReaded = new byte[size]; if (size > streamLength) { size = Convert.ToInt32(streamLength); } long currentPosition = 0; bool isEnd = false; while (isEnd == false) { if ((currentPosition + size) >= streamLength) { size = Convert.ToInt32(streamLength - currentPosition); isEnd = true; } bytesReaded = new byte[size]; inputSteam.Position = currentPosition; inputSteam.Read(bytesReaded, 0, size); if (operateStreamEnventHandler != null) { operateStreamEnventHandler(null, new OperateStreamEnventArgs() { BytesReaded = bytesReaded, CallBackObject = callBackObject }); } currentPosition += size; } }
/// <summary> /// 以分块的方式对流进行循环地操作 /// </summary> /// <param name="inputSteam">输入的流</param> /// <param name="operateStreamEnventHandler">对流分块后,可以调用的具体的操作方法</param> public static void BlocklyCircularlyOperateStream(Stream inputSteam, OperateStreamEnventHandler operateStreamEnventHandler) { BlocklyCircularlyOperateStream(inputSteam, operateStreamEnventHandler, null); }