Example #1
0
        /// <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;
            }
        }
Example #2
0
 /// <summary>
 /// 以分块的方式对流进行循环地操作
 /// </summary>
 /// <param name="inputSteam">输入的流</param>
 /// <param name="operateStreamEnventHandler">对流分块后,可以调用的具体的操作方法</param>
 public static void BlocklyCircularlyOperateStream(Stream inputSteam, OperateStreamEnventHandler operateStreamEnventHandler)
 {
     BlocklyCircularlyOperateStream(inputSteam, operateStreamEnventHandler, null);
 }