내용 보기
작성자
관리자 (IP : 172.17.0.1)
날짜
2021-01-06 09:56
제목
[C#] System.IO.MemoryStream, ArraySegment<T> 의 효율적인 사용법
|
MemroyStream으로부터 바이트 스트림을 반환받을 수 있는 방법이 2가지입니다. 하나는 GetBuffer, 또 다른 하나는 ToArray인데요. using System;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MemoryStream ms = new MemoryStream();
byte [] buf = Encoding.UTF8.GetBytes("hello");
ms.Write(buf, 0, buf.Length);
byte[] getBuffer = ms.GetBuffer();
Console.WriteLine("GetBuffer.Length: " + getBuffer.Length); // 256
byte[] toArray = ms.ToArray();
Console.WriteLine("ToArray.Length: " + toArray.Length); // 5
}
}
}
public virtual byte[] GetBuffer() // 내부에 이미 할당된 바이트 배열 변수를 그대로 반환
{
if (!this._exposable)
{
throw new UnauthorizedAccessException(...);
}
return this._buffer;
}
public virtual byte[] ToArray() // 새롭게 배열을 생성하고 내용을 복사해서 반환
{
byte[] dst = new byte[this._length - this._origin];
Buffer.InternalBlockCopy(this._buffer, this._origin, dst, 0, this._length - this._origin);
return dst;
}
static ArraySegment
byte[] sourceArray = stream.GetBuffer();
int sourceLength = stream.Length;
byte[] destinationArray = bufferManager.TakeBuffer(sourceLength);
Array.Copy(sourceArray, 0, destinationArray, 0, sourceLength);
byte[] getBuffer = ms.GetBuffer();
LogBytes(getBuffer, ms.Length);
private static void LogBytes(byte[] buffer, long length)
{
for (long idx = 0; idx < length; idx++)
{
Console.Write(buffer[idx].ToString("x") + ", ");
}
Console.WriteLine();
}
byte[] getBuffer = ms.GetBuffer(); ArraySegment |
출처1
https://www.sysnet.pe.kr/2/0/1483
출처2