Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReadAsync() [3/3]

override ValueTask< int > System.Text.TranscodingStream.ReadAsync ( Memory< byte > buffer,
CancellationToken cancellationToken )
inlinevirtual

Reimplemented from System.IO.Stream.

Definition at line 261 of file TranscodingStream.cs.

262 {
264 if (cancellationToken.IsCancellationRequested)
265 {
267 }
268 return ReadAsyncCore(buffer, cancellationToken);
269 async ValueTask<int> ReadAsyncCore(Memory<byte> buffer, CancellationToken cancellationToken)
270 {
271 if (_readBufferCount == 0)
272 {
273 byte[] rentedBytes = ArrayPool<byte>.Shared.Rent(4096);
274 char[] rentedChars = ArrayPool<char>.Shared.Rent(_readCharBufferMaxSize);
275 try
276 {
277 bool flag;
278 int bytes;
279 do
280 {
281 int num = await _innerStream.ReadAsync(rentedBytes.AsMemory(0, 4096), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
282 flag = num == 0;
283 int chars = _innerDecoder.GetChars(rentedBytes, 0, num, rentedChars, 0, flag);
284 bytes = _thisEncoder.GetBytes(rentedChars, 0, chars, _readBuffer, 0, flag);
285 }
286 while (!flag && bytes == 0);
289 }
290 finally
291 {
292 ArrayPool<byte>.Shared.Return(rentedBytes);
293 ArrayPool<char>.Shared.Return(rentedChars);
294 }
295 }
296 int num2 = Math.Min(_readBufferCount, buffer.Length);
297 _readBuffer.AsSpan(_readBufferOffset, num2).CopyTo(buffer.Span);
298 _readBufferOffset += num2;
299 _readBufferCount -= num2;
300 return num2;
301 }
302 }
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
Task< int > ReadAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:762
int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
static ValueTask FromCanceled(CancellationToken cancellationToken)
Definition ValueTask.cs:180

References System.Text.TranscodingStream._innerDecoder, System.Text.TranscodingStream._innerStream, System.Text.TranscodingStream._readBuffer, System.Text.TranscodingStream._readBufferCount, System.Text.TranscodingStream._readBufferOffset, System.Text.TranscodingStream._readCharBufferMaxSize, System.Text.TranscodingStream._thisEncoder, System.buffer, System.bytes, System.cancellationToken, System.chars, System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Text.TranscodingStream.EnsurePreReadConditions(), System.Threading.Tasks.ValueTask< TResult >.FromCanceled(), System.Text.Encoder.GetBytes(), System.Text.Decoder.GetChars(), System.Math.Min(), System.IO.Stream.ReadAsync(), and System.Buffers.ArrayPool< T >.Shared.