byte[]
에 액세스 할 수있는 작은 문제가 있습니다.
DB에서 얻은 이진 객체 (byte[]
)가 있는데이 객체를 읽을 수 있습니다. 길이에 상관없이 또는 Read() 메서드에 액세스 할 때마다 Cannot access a closed Stream
예외가 발생합니다.
코드에서 업데이트하고 db에 다시 저장해야하는 바이너리를 치료하는 가장 좋은 방법은 무엇입니까?C#의 기존 바이트 []에 어떻게 액세스합니까?
감사합니다.
편집 - 우리가 간소화하기 위해 만든 일반 데이터 객체에 대한 테스트 개체를 변환이 응용 프로그램에서 코드
, 그래서 이것은 데이터 객체입니다
public class DataObject
{
public Stream Content { get; set; }
public Descriptor Descriptor { get; set; }
}
기술자가 메타 데이터 만 포함이 (현재는 이름과 설명 문자열 만) 관련성이 없다고 생각합니다. 테스트가 더 복잡해 지므로 데이터 객체에 매핑을 추가하는 것으로 시작하겠습니다. 언급 된 시리얼 라이저는 NetDataContractSerializer
입니다.
public DataObject Map(Test test)
{
using(var stream = new MemoryStream())
{
Serialize(test, stream);
return new DataObject { Content = stream, Descriptor = test.Descriptor };
}
}
private void Serialize(Test test, MemoryStream stream)
{
serializer.WriteObject(stream, test);
stream.Flush();
stream.Position = 0;
}
와 그 반대의 경우도 마찬가지 :
public Test Build(DataObject data)
{
using (var stream = data.Content)
{
var test = Deserialize(stream);
test.Descriptor = data.Descriptor;
return test ;
}
}
private Test Deserialize(Stream stream)
{
return serializer.ReadObject(stream) as IPythonTest;
}
편집 II - 시험의 내용 변경하려고 : 이것은 내가 그 일을하고있어 확실하지 않다, 내 첫 번째 시도 처리 스트림
입니다을 맞습니다. 먼저 내가하고 싶은 것을 설명 할 것입니다 : data
의 정보는 테스트의 데이터 객체에 저장되어야합니다.
private static void UpdateTestObject(DataObject data, Test test)
{
var testData = new byte[data.Content.Length];
data.Content.Read(testData, 0, (int) data.Content.Length);
test.TestObject = testData;
}
data.Content에 액세스 할 때 예외가 발생합니다 (UpdateTestObject
). 몇 가지 테스트를 만들고 맵핑 한 다음 저장하려고 시도합니다.
코드를 공유 하시겠습니까? 아니면 스트림을 어떻게 읽었는지 제안해야합니까? – sll
당신은'Stream'을 포함하고있는 것처럼 보이지만, "binary object"와 "byte []"에 대해서 이야기합니다 - 어떤 코드는 물을 뭉개지 않게 할 수 있습니다. –
'byte []'는'Read()'메소드를 가지고 있지 않습니다. 실제로'Stream'을 가지고 있다면,이'Stream'을 어떻게 얻는 지 (그리고 언제 어떻게 조작하려고하는지) 명시 해주십시오. –