2013-01-14 1 views
1

나는BLOB 데이터를 문자열로 변환하는 방법은 무엇입니까?

public string BinaryToText(byte[] data) 
{ 
    MemoryStream stream = new MemoryStream(data); 
    StreamReader reader = new StreamReader(stream, encoding.UTF8); 
    string text = reader.ReadTod(); 
    return text; 
} 

그러나 System.OutOfMemoryException가 30MB 데이터에 대해 표시됩니다 텍스트 이진 데이터를 변환하기 위해 다음과 같은 기능을 사용하고 있습니다. 이 문제를 해결하고 더 나은 방법을 사용하여 더 큰 100MB 데이터를 변환하는 방법은 무엇입니까?

+0

당신이 데이터를 처리 할 수 ​​있다면 당신은 같은 것을 할 수 있고, 여러 개의 문자열로 반환 이것을 클라이언트에 보내려고하십니까> –

+0

그 데이터가 실제로 UTF8이 아니라면 어쨌든 당신이하고있는 일이 잘못되었습니다! 원래 데이터는 실제로 UTF8입니까? –

+0

가능한 중복 http://stackoverflow.com/questions/1003275/byte-to-string-in-c-sharp –

답변

5

대신을 시도해보십시오

public string BinaryToText(byte[] data) 
{ 
    return Encoding.UTF8.GetString(data); 
} 

그것은 메모리를 적게 소모합니다. 에 여전히이 부족한 경우 청크로 읽어야합니다. 그러나 데이터를 사용하는 방법에 따라 데이터를 읽을 수 있는지 여부가 결정됩니다. 반환 된 문자열로 무엇을하고 있습니까?

또한 이전 질문을 반복합니다. 은 실제로 UTF8 데이터입니까?

그런 다음
public IEnumerable<string> BinaryToStrings(byte[] data, int maxStringLength) 
{ 
    var buffer = new char[maxStringLength]; 

    using (MemoryStream stream = new MemoryStream(data)) 
    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) 
    { 
     while (true) 
     { 
      int count = reader.Read(buffer, 0, maxStringLength); 

      if (count == 0) 
      { 
       break; 
      } 

      yield return new string(buffer, 0, count); 
     } 
    } 
} 

당신이 그렇게처럼 foreach 루프에서 그것을 호출 할 수 있습니다 :

foreach (string chunk in BinaryToStrings(data, 1024)) 
{ 
    // Do something with 'chunk'... 
} 
관련 문제