当前位置: 首页>>代码示例>>C#>>正文


C# ArraySegment类代码示例

本文整理汇总了C#中ArraySegment的典型用法代码示例。如果您正苦于以下问题:C# ArraySegment类的具体用法?C# ArraySegment怎么用?C# ArraySegment使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


ArraySegment类属于命名空间,在下文中一共展示了ArraySegment类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: HandleTcpReceived

        internal void HandleTcpReceived(uint sequenceNumber, ArraySegment<byte> data)
        {
            var dataPosition = SequenceNumberToBytesReceived(sequenceNumber);
            if (dataPosition == BytesReceived)
            {
                OnDataReceived(data);
                BytesReceived += data.Count;
            }
            else
            {
                var dataArray = new byte[data.Count];
                Array.Copy(data.Array, data.Offset, dataArray, 0, data.Count);
                if (!_bufferedPackets.ContainsKey(dataPosition) || _bufferedPackets[dataPosition].Length < dataArray.Length)
                {
                    _bufferedPackets[dataPosition] = dataArray;
                }
            }

            long firstBufferedPosition;
            while (_bufferedPackets.Any() && ((firstBufferedPosition = _bufferedPackets.Keys.First()) <= BytesReceived))
            {
                var dataArray = _bufferedPackets[firstBufferedPosition];
                _bufferedPackets.Remove(firstBufferedPosition);

                var alreadyReceivedBytes = BytesReceived - firstBufferedPosition;
                Debug.Assert(alreadyReceivedBytes >= 0);

                if (alreadyReceivedBytes < dataArray.Length)
                {
                    var count = dataArray.Length - alreadyReceivedBytes;
                    OnDataReceived(new ArraySegment<byte>(dataArray, (int)alreadyReceivedBytes, (int)count));
                    BytesReceived += count;
                }
            }
        }
开发者ID:kuko0411,项目名称:TeraDamageMeter,代码行数:35,代码来源:TcpConnection.cs

示例2: DeserializeObject

		protected override object DeserializeObject(ArraySegment<byte> value)
		{
			var ds = new NetDataContractSerializer();

			using (var ms = new MemoryStream(value.Array, value.Offset, value.Count))
				return ds.Deserialize(ms);
		}
开发者ID:javithalion,项目名称:NCache,代码行数:7,代码来源:DataContractTranscoder.cs

示例3: Encrypt_KnownKey

        public void Encrypt_KnownKey()
        {
            // Arrange
            Secret kdk = new Secret(Encoding.UTF8.GetBytes("master key"));
            GcmAuthenticatedEncryptor encryptor = new GcmAuthenticatedEncryptor(kdk, CachedAlgorithmHandles.AES_GCM, symmetricAlgorithmKeySizeInBytes: 128 / 8, genRandom: new SequentialGenRandom());
            ArraySegment<byte> plaintext = new ArraySegment<byte>(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }, 2, 3);
            ArraySegment<byte> aad = new ArraySegment<byte>(new byte[] { 7, 6, 5, 4, 3, 2, 1, 0 }, 1, 4);

            // Act
            byte[] retVal = encryptor.Encrypt(
                plaintext: plaintext,
                additionalAuthenticatedData: aad,
                preBufferSize: 3,
                postBufferSize: 4);

            // Assert

            // retVal := 00 00 00 (preBuffer)
            //         | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F (keyModifier)
            //         | 10 11 12 13 14 15 16 17 18 19 1A 1B (nonce)
            //         | 43 B6 91 (encryptedData)
            //         | 8D 0D 66 D9 A1 D9 44 2D 5D 8E 41 DA 39 60 9C E8 (authTag)
            //         | 00 00 00 00 (postBuffer)

            string retValAsString = Convert.ToBase64String(retVal);
            Assert.Equal("AAAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaG0O2kY0NZtmh2UQtXY5B2jlgnOgAAAAA", retValAsString);
        }
开发者ID:leloulight,项目名称:DataProtection,代码行数:27,代码来源:GcmAuthenticatedEncryptorTests.cs

示例4: MinimumSubsequenceProduct

        static int MinimumSubsequenceProduct(ArraySegment<int> Sequence)
        {
            if (Sequence.Count == 1)
                return Sequence.Array[Sequence.Offset];
            int Middle = Sequence.Count / 2;
            int LeftProduct = MinimumSubsequenceProduct(new ArraySegment<int>(Sequence.Array, Sequence.Offset, Middle));
            int RightProduct = MinimumSubsequenceProduct(new ArraySegment<int>(Sequence.Array, Sequence.Offset + Middle, Middle));

            int MiddleProduct = 1;
            int MiddleLeftProduct = 1;
            int TempLeftProduct = 1;
            for (int i = Middle; i >= Sequence.Offset; i--) {
                TempLeftProduct *= Sequence.Array[i];
                if (TempLeftProduct < MiddleLeftProduct)
                    MiddleLeftProduct = TempLeftProduct;
            }

            int MiddleRightProduct = 1;
            int TempRightProduct = 1;
            for (int i = Middle + 1; i < Sequence.Offset + Sequence.Count; i++) {
                TempRightProduct *= Sequence.Array[i];
                if (TempRightProduct < MiddleRightProduct)
                    MiddleRightProduct = TempRightProduct;
            }
            MiddleProduct = MiddleLeftProduct * MiddleRightProduct;
            return Math.Min(Math.Min(LeftProduct, MiddleProduct), RightProduct);
        }
开发者ID:MadRubicant,项目名称:Project-Euler,代码行数:27,代码来源:Subsequence.cs

示例5: SettingsPair

 // Outgoing
 public SettingsPair(SettingsFlags flags, SettingsIds id, int value)
 {
     _bufferSegment = new ArraySegment<byte>(new byte[PairSize], 0, PairSize);
     Flags = flags;
     Id = id;
     Value = value;
 }
开发者ID:TrickyCat,项目名称:http2-katana,代码行数:8,代码来源:SettingsPair.cs

示例6: ReadMessage

        /// <inheritdoc />
        public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
        {
            // Treat the alternate as native
            if (IsAlternateContent(contentType))
            {
                // HACK: Should see if we have a declr or some xml
               contentType = this.contentType;
            }

            var msgContents = new byte[buffer.Count];
            Array.Copy(buffer.Array, buffer.Offset, msgContents, 0, msgContents.Length);
            bufferManager.ReturnBuffer(buffer.Array);

            // Most interoperable to include the xml declaration
            writerSettings.OmitXmlDeclaration = false;

            // Save the encoding for when we write the response
            writerSettings.Encoding = msgContents.GetEncoding(contentType);
            var xmlDeclEncoding = msgContents.GetXmlDeclEncoding(writerSettings.Encoding);

            // Check if the two encodings align
            if (xmlDeclEncoding != null && xmlDeclEncoding.WebName == writerSettings.Encoding.WebName)
            {
                // Need to recode
                msgContents = Encoding.Convert(writerSettings.Encoding, xmlDeclEncoding, msgContents);
            }

            var stream = new MemoryStream(msgContents);
            return ReadMessage(stream, int.MaxValue);
        }
开发者ID:RustyF,项目名称:EnergyTrading-Core,代码行数:31,代码来源:CustomTextMessageEncoder.cs

示例7: Handshake

        public static byte[] Handshake(WebSocketHttpRequest request)
        {
            FleckLog.Debug("Building Draft76 Response");

            var builder = new StringBuilder();
            builder.Append("HTTP/1.1 101 WebSocket Protocol Handshake\r\n");
            builder.Append("Upgrade: WebSocket\r\n");
            builder.Append("Connection: Upgrade\r\n");
            builder.AppendFormat("Sec-WebSocket-Origin: {0}\r\n",  request["Origin"]);
            builder.AppendFormat("Sec-WebSocket-Location: {0}://{1}{2}\r\n", request.Scheme, request["Host"], request.Path);

            if (request.Headers.ContainsKey("Sec-WebSocket-Protocol"))
                builder.AppendFormat("Sec-WebSocket-Protocol: {0}\r\n", request["Sec-WebSocket-Protocol"]);

            builder.Append("\r\n");

            var key1 = request["Sec-WebSocket-Key1"];
            var key2 = request["Sec-WebSocket-Key2"];
            var challenge = new ArraySegment<byte>(request.Bytes, request.Bytes.Length - 8, 8);

            var answerBytes = CalculateAnswerBytes(key1, key2, challenge);

            byte[] byteResponse = Encoding.ASCII.GetBytes(builder.ToString());
            int byteResponseLength = byteResponse.Length;
            Array.Resize(ref byteResponse, byteResponseLength + answerBytes.Length);
            Array.Copy(answerBytes, 0, byteResponse, byteResponseLength, answerBytes.Length);

            return byteResponse;
        }
开发者ID:smerrell,项目名称:Fleck,代码行数:29,代码来源:Draft76Handler.cs

示例8: DeserializeObject

        protected override object DeserializeObject(ArraySegment<byte> value) {
            Byte[] buffer;
            if (value.Offset != 0) {
                buffer = new Byte[value.Count];
                Array.Copy(value.Array, value.Offset, buffer, 0, value.Count);
            }
            else {
                buffer = value.Array;
            }

            Boolean isJson = false;
            if (buffer[0] == 123 && buffer[buffer.Length - 1] == 125) {
                isJson = true;
            }
            if (!isJson) {
                var isOrignalObjectByte = buffer.Take(10).Distinct().All(_donetBytes.Contains);
                isJson = !isOrignalObjectByte;
            }

            if (isJson) {
                return JsonDeserialize(buffer);
            }
            else {
                try {
                    return base.DeserializeObject(value);
                }
                catch (SerializationException) {
                    // Log or something
                    return JsonDeserialize(buffer);
                }
            }
        }
开发者ID:wxr524720,项目名称:Jusfr.Caching,代码行数:32,代码来源:NewtonsoftJsonTranscoder.cs

示例9: GetMessage

 private static void GetMessage(Tuple<int, WebSocket> connection, WebSocketReceiveResult result, ArraySegment<byte> bytes)
 {
     var connectionId = connection.Item1;
     var webSocket = connection.Item2;
     var message = Encoding.UTF8.GetString(bytes.Array, 0, result.Count);
     Broadcast(message, connectionId, result.EndOfMessage);
 }
开发者ID:streamcode9,项目名称:chat,代码行数:7,代码来源:WebSocketsHelper.cs

示例10: Listen

        private static async Task Listen(Tuple<int, WebSocket> connection)
        {            
            const int maxMsgSize = 1024;
            var webSocket = connection.Item2;
            var buffer = new ArraySegment<byte>(new byte[maxMsgSize]);
            WebSocketReceiveResult result = null;

            do
            {
                logger.LogVerbose("Listen");

                try {
                    result = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
                }
                catch(Exception ex)
                {
                    logger.LogVerbose("ReceiveAsync error: {0}", ex.Message);
                    await webSocket.CloseAsync(WebSocketCloseStatus.ProtocolError, "webSocket.ReceiveAsync error", CancellationToken.None);
                    return;
                }                

                GetMessage(connection, result, buffer);
            } while (!result.CloseStatus.HasValue);

            await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
        }
开发者ID:streamcode9,项目名称:chat,代码行数:26,代码来源:WebSocketsHelper.cs

示例11: ConcateOperation

		internal ConcateOperation(ConcatenationMode mode, string key, ArraySegment<byte> data)
			: base(mode == ConcatenationMode.Append
					? StoreCommand.Append
					: StoreCommand.Prepend, key, new CacheItem() { Data = data, Flags = 0 }, 0, 0)
		{
			this.mode = mode;
		}
开发者ID:xianrendzw,项目名称:LightFramework.Net,代码行数:7,代码来源:ConcateOperation.cs

示例12: Send

        public void Send(ArraySegment<byte> segment)
        {
            if (!m_Connected || m_Session == null)
                throw new Exception("The socket is not connected.");

            m_Session.Send(segment);
        }
开发者ID:wujun4code,项目名称:SuperSocket.ClientEngine,代码行数:7,代码来源:EasyClientBase.Net20.cs

示例13: WebSocketBuffer

        private WebSocketBuffer(ArraySegment<byte> internalBuffer, int receiveBufferSize, int sendBufferSize)
        {
            Contract.Assert(internalBuffer != null, "'internalBuffer' MUST NOT be NULL.");
            Contract.Assert(receiveBufferSize >= MinReceiveBufferSize,
                "'receiveBufferSize' MUST be at least " + MinReceiveBufferSize.ToString(NumberFormatInfo.InvariantInfo) + ".");
            Contract.Assert(sendBufferSize >= MinSendBufferSize,
                "'sendBufferSize' MUST be at least " + MinSendBufferSize.ToString(NumberFormatInfo.InvariantInfo) + ".");
            Contract.Assert(receiveBufferSize <= MaxBufferSize,
                "'receiveBufferSize' MUST NOT exceed " + MaxBufferSize.ToString(NumberFormatInfo.InvariantInfo) + ".");
            Contract.Assert(sendBufferSize <= MaxBufferSize,
                "'sendBufferSize' MUST NOT exceed  " + MaxBufferSize.ToString(NumberFormatInfo.InvariantInfo) + ".");

            m_ReceiveBufferSize = receiveBufferSize;
            m_SendBufferSize = sendBufferSize;
            m_InternalBuffer = internalBuffer;
            m_GCHandle = GCHandle.Alloc(internalBuffer.Array, GCHandleType.Pinned);
            // Size of the internal buffer owned exclusively by the WSPC.
            int nativeBufferSize = m_ReceiveBufferSize + m_SendBufferSize + NativeOverheadBufferSize;
            m_StartAddress = Marshal.UnsafeAddrOfPinnedArrayElement(internalBuffer.Array, internalBuffer.Offset).ToInt64();
            m_EndAddress = m_StartAddress + nativeBufferSize;
            m_NativeBuffer = new ArraySegment<byte>(internalBuffer.Array, internalBuffer.Offset, nativeBufferSize);
            m_PayloadBuffer = new ArraySegment<byte>(internalBuffer.Array,
                m_NativeBuffer.Offset + m_NativeBuffer.Count, 
                m_ReceiveBufferSize);
            m_PropertyBuffer = new ArraySegment<byte>(internalBuffer.Array,
                m_PayloadBuffer.Offset + m_PayloadBuffer.Count,
                s_PropertyBufferSize);
            m_SendBufferState = SendBufferState.None;
        }
开发者ID:nlh774,项目名称:DotNetReferenceSource,代码行数:29,代码来源:WebSocketBuffer.cs

示例14: DeriveKeysWithContextHeader

 public static void DeriveKeysWithContextHeader(byte[] kdk, ArraySegment<byte> label, byte[] contextHeader, ArraySegment<byte> context, Func<byte[], HashAlgorithm> prfFactory, ArraySegment<byte> output)
 {
     byte[] combinedContext = new byte[checked(contextHeader.Length + context.Count)];
     Buffer.BlockCopy(contextHeader, 0, combinedContext, 0, contextHeader.Length);
     Buffer.BlockCopy(context.Array, context.Offset, combinedContext, contextHeader.Length, context.Count);
     DeriveKeys(kdk, label, new ArraySegment<byte>(combinedContext), prfFactory, output);
 }
开发者ID:leloulight,项目名称:DataProtection,代码行数:7,代码来源:ManagedSP800_108_CTR_HMACSHA512.cs

示例15: GetPublicKey

        public static void GetPublicKey(ArraySegment<byte> publicKey, ArraySegment<byte> privateKey)
        {
            if (publicKey.Array == null)
                throw new ArgumentNullException("publicKey.Array");
            if (privateKey.Array == null)
                throw new ArgumentNullException("privateKey.Array");
            if (publicKey.Count != PublicKeySizeInBytes)
                throw new ArgumentException("privateKey.Count must be 32");
            if (privateKey.Count != PrivateKeySizeInBytes)
                throw new ArgumentException("privateKey.Count must be 32");

            // hack: abusing publicKey as temporary storage
            // todo: remove hack
            for (int i = 0; i < 32; i++)
            {
                publicKey.Array[publicKey.Offset + i] = privateKey.Array[privateKey.Offset + i];
            }
            ScalarOperations.sc_clamp(publicKey.Array, publicKey.Offset);

            GroupElementP3 A;
            GroupOperations.ge_scalarmult_base(out A, publicKey.Array, publicKey.Offset);
            FieldElement publicKeyFE;
            EdwardsToMontgomeryX(out publicKeyFE, ref A.Y, ref A.Z);
            FieldOperations.fe_tobytes(publicKey.Array, publicKey.Offset, ref publicKeyFE);
        }
开发者ID:FihlaTV,项目名称:csharp-stellar-base,代码行数:25,代码来源:MontgomeryCurve25519.cs


注:本文中的ArraySegment类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。