Opc.Ua.Bindings.ArraySegmentStream.Write C# (CSharp) Méthode

Write() public méthode

public Write ( byte buffer, int offset, int count ) : void
buffer byte
offset int
count int
Résultat void
        public override void Write(byte[] buffer, int offset, int count)
        {
            while (count > 0)
            {
                // check for end of stream.
                if (m_currentBuffer.Array == null)
                {
                    if (m_bufferManager == null)
                    {
                        throw new IOException("Attempt to write past end of stream.");
                    }

                    byte[] newBuffer = m_bufferManager.TakeBuffer(m_bufferSize, "ArraySegmentStream.Write");
                    m_buffers.Add(new ArraySegment<byte>(newBuffer, m_start, m_count));
                    m_endOfLastBuffer = 0;

                    SetCurrentBuffer(m_buffers.Count-1);
                }

                int bytesLeft = m_currentBuffer.Count - m_currentPosition;

                // copy the bytes requested.
                if (bytesLeft >= count)
                {
                    Array.Copy(buffer, offset, m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, count);
                    
                    m_currentPosition += count;

                    if (m_bufferIndex == m_buffers.Count-1)
                    {
                        if (m_endOfLastBuffer < m_currentPosition)
                        {
                            m_endOfLastBuffer = m_currentPosition;
                        }
                    }

                    return;
                }
                
                // copy the bytes available and move to next buffer.
                Array.Copy(buffer, offset, m_currentBuffer.Array, m_currentPosition + m_currentBuffer.Offset, bytesLeft);
                
                offset += bytesLeft;
                count  -= bytesLeft;
                
                // move to next buffer.
                SetCurrentBuffer(m_bufferIndex+1);
            }
        }
        #endregion