Server.FileQueue.Enqueue C# (CSharp) Méthode

Enqueue() public méthode

public Enqueue ( byte buffer, int offset, int size ) : void
buffer byte
offset int
size int
Résultat void
		public void Enqueue( byte[] buffer, int offset, int size ) {
			if ( buffer == null ) {
				throw new ArgumentNullException( "buffer" );
			} else if ( offset < 0 ) {
				throw new ArgumentOutOfRangeException( "offset" );
			} else if ( size < 0 ) {
				throw new ArgumentOutOfRangeException( "size" );
			} else if ( ( buffer.Length - offset ) < size ) {
				throw new ArgumentException();
			}

			position += size;

			while ( size > 0 ) {
				if ( buffered.buffer == null ) { // nothing yet buffered
					buffered.buffer = bufferPool.AcquireBuffer();
				}

				byte[] page = buffered.buffer; // buffer page
				int pageSpace = page.Length - buffered.length; // available bytes in page
				int byteCount = ( size > pageSpace ? pageSpace : size ); // how many bytes we can copy over

				Buffer.BlockCopy( buffer, offset, page, buffered.length, byteCount );

				buffered.length += byteCount;
				offset += byteCount;
				size -= byteCount;

				if ( buffered.length == page.Length ) { // page full
					Append( buffered );

					buffered.buffer = null;
					buffered.length = 0;
				}
			}
		}
	}

Usage Example

 public override void Write(byte[] buffer, int offset, int size)
 {
     fileQueue.Enqueue(buffer, offset, size);
 }