내 메서드는 매개 변수로 MemoryStream을 가져옵니다. 이 MemoryStream이 확장 가능한지 어떻게 알 수 있습니까?MemoryStream이 고정 크기인지 확인하는 방법은 무엇입니까?
MemoryStream은 "new MemoryStream (byte [] buf)"을 사용하여 배열을 사용하여 만들 수 있습니다. 즉, 스트림의 크기는 고정되어 있습니다. 데이터에 데이터를 추가 할 수 없습니다. 한편, "new MemoryStream()"을 사용하여 매개 변수없이 스트림을 만들 수 있습니다. 이 경우 데이터를 추가 할 수 있습니다.
질문 : 어떻게 알 수 있습니까? 현재 스트림에 안전하게 데이터를 추가 할 수 있습니까 아니면 새로운 확장 가능 스트림을 만들어 데이터를 복사해야합니까?
static bool IsExpandable(MemoryStream stream)
{
return (bool)typeof(MemoryStream)
.GetField("_expandable", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.GetValue(stream);
}
이 정보를 검색 할 수있는 청소기/안전한 방법이 있는지 모르겠어요 :
CanWrite 속성을 사용해 보셨습니까? 그 경우를 구별합니까? – chris
더 이상의 컨텍스트가 없으면 시도해서는 안됩니다. 호출자가 데이터를 수락 할 수없는 스트림을 전달하면 데이터를 쓰는 작업을 호출해서는 안됩니다. 즉, 클래스의 인터페이스를 향상시켜 문제가되지 않을 수도 있습니다. – bmm6o
항상 데이터를 받아 들일 수 있습니다. 스트림에 무엇이든 쓸 수 있지만 사용 가능한 버퍼는 고정되어 있습니다. 버퍼 외부에 글을 쓸 수없고 용량을 늘릴 수도 없다. –