本文整理汇总了C#中IByteBuffer.AccessBackingBytes方法的典型用法代码示例。如果您正苦于以下问题:C# IByteBuffer.AccessBackingBytes方法的具体用法?C# IByteBuffer.AccessBackingBytes怎么用?C# IByteBuffer.AccessBackingBytes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IByteBuffer
的用法示例。
在下文中一共展示了IByteBuffer.AccessBackingBytes方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReadBytesAsync
public static async Task ReadBytesAsync(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
if (stream == null)
{
throw new ArgumentNullException("stream");
}
if (buffer == null)
{
throw new ArgumentNullException("buffer");
}
if (offset < 0 || offset > buffer.Length)
{
throw new ArgumentOutOfRangeException("offset");
}
if (count < 0 || offset + count > buffer.Length)
{
throw new ArgumentOutOfRangeException("count");
}
while (count > 0)
{
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToRead = Math.Min(count, backingBytes.Count);
var bytesRead = await stream.ReadAsync(backingBytes.Array, backingBytes.Offset, bytesToRead, cancellationToken).ConfigureAwait(false);
if (bytesRead == 0)
{
throw new EndOfStreamException();
}
offset += bytesRead;
count -= bytesRead;
}
}
示例2: WriteBufferAsync
public static async Task WriteBufferAsync(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
while (count > 0)
{
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToWrite = Math.Min(count, backingBytes.Count - backingBytes.Offset);
await stream.WriteAsync(backingBytes.Array, backingBytes.Offset, bytesToWrite, cancellationToken);
offset += bytesToWrite;
count -= bytesToWrite;
}
}
示例3: FillBufferAsync
public static async Task FillBufferAsync(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
while (count > 0)
{
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToRead = Math.Min(count, backingBytes.Count);
var bytesRead = await stream.ReadAsync(backingBytes.Array, backingBytes.Offset, bytesToRead, cancellationToken);
if (bytesRead == 0)
{
throw new EndOfStreamException();
}
offset += bytesRead;
count -= bytesRead;
}
}
示例4: ReadBytes
public static void ReadBytes(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
Ensure.IsNotNull(stream, nameof(stream));
Ensure.IsNotNull(buffer, nameof(buffer));
Ensure.IsBetween(offset, 0, buffer.Length, nameof(offset));
Ensure.IsBetween(count, 0, buffer.Length - offset, nameof(count));
while (count > 0)
{
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToRead = Math.Min(count, backingBytes.Count);
var bytesRead = stream.Read(backingBytes.Array, backingBytes.Offset, bytesToRead); // TODO: honor cancellationToken?
if (bytesRead == 0)
{
throw new EndOfStreamException();
}
offset += bytesRead;
count -= bytesRead;
}
}
示例5: WriteSlice
/// <summary>
/// Writes a slice to the stream.
/// </summary>
/// <param name="stream">The stream.</param>
/// <param name="slice">The slice.</param>
public static void WriteSlice(this BsonStream stream, IByteBuffer slice)
{
if (stream == null)
{
throw new ArgumentNullException("stream");
}
if (slice == null)
{
throw new ArgumentNullException("slice");
}
var position = 0;
var count = slice.Length;
while (count > 0)
{
var segment = slice.AccessBackingBytes(position);
var partialCount = Math.Min(count, segment.Count);
stream.WriteBytes(segment.Array, segment.Offset, partialCount);
position += partialCount;
count -= partialCount;
}
}
示例6: GetResponseTo
// private methods
private int GetResponseTo(IByteBuffer message)
{
var backingBytes = message.AccessBackingBytes(8);
return BitConverter.ToInt32(backingBytes.Array, backingBytes.Offset);
}
示例7: ReadBytesAsync
public static async Task ReadBytesAsync(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
Ensure.IsNotNull(stream, nameof(stream));
Ensure.IsNotNull(buffer, nameof(buffer));
Ensure.IsBetween(offset, 0, buffer.Length, nameof(offset));
Ensure.IsBetween(count, 0, buffer.Length - offset, nameof(count));
while (count > 0)
{
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToRead = Math.Min(count, backingBytes.Count);
var bytesRead = await stream.ReadAsync(backingBytes.Array, backingBytes.Offset, bytesToRead, cancellationToken).ConfigureAwait(false);
if (bytesRead == 0)
{
throw new EndOfStreamException();
}
offset += bytesRead;
count -= bytesRead;
}
}
示例8: WriteBytesAsync
public static async Task WriteBytesAsync(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
Ensure.IsNotNull(stream, nameof(stream));
Ensure.IsNotNull(buffer, nameof(buffer));
Ensure.IsBetween(offset, 0, buffer.Length, nameof(offset));
Ensure.IsBetween(count, 0, buffer.Length - offset, nameof(count));
while (count > 0)
{
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToWrite = Math.Min(count, backingBytes.Count);
await stream.WriteAsync(backingBytes.Array, backingBytes.Offset, bytesToWrite, cancellationToken).ConfigureAwait(false);
offset += bytesToWrite;
count -= bytesToWrite;
}
}
示例9: WriteBytes
public static void WriteBytes(this Stream stream, IByteBuffer buffer, int offset, int count, CancellationToken cancellationToken)
{
Ensure.IsNotNull(stream, nameof(stream));
Ensure.IsNotNull(buffer, nameof(buffer));
Ensure.IsBetween(offset, 0, buffer.Length, nameof(offset));
Ensure.IsBetween(count, 0, buffer.Length - offset, nameof(count));
while (count > 0)
{
cancellationToken.ThrowIfCancellationRequested();
var backingBytes = buffer.AccessBackingBytes(offset);
var bytesToWrite = Math.Min(count, backingBytes.Count);
stream.Write(backingBytes.Array, backingBytes.Offset, bytesToWrite); // TODO: honor cancellationToken?
offset += bytesToWrite;
count -= bytesToWrite;
}
}