init
This commit is contained in:
		
							
								
								
									
										59
									
								
								Framework/Util/StreamUtil.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Framework/Util/StreamUtil.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| using System; | ||||
|  | ||||
| namespace Kreta.Framework.Util | ||||
| { | ||||
|     public class StreamUtil | ||||
|     { | ||||
|         public static byte[] ConvertStreamToByteArray(System.IO.Stream stream) | ||||
|         { | ||||
|             long originalPosition = 0; | ||||
|  | ||||
|             if (stream.CanSeek) | ||||
|             { | ||||
|                 originalPosition = stream.Position; | ||||
|                 stream.Position = 0; | ||||
|             } | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 byte[] readBuffer = new byte[4096]; | ||||
|  | ||||
|                 int totalBytesRead = 0; | ||||
|                 int bytesRead; | ||||
|  | ||||
|                 while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0) | ||||
|                 { | ||||
|                     totalBytesRead += bytesRead; | ||||
|  | ||||
|                     if (totalBytesRead == readBuffer.Length) | ||||
|                     { | ||||
|                         int nextByte = stream.ReadByte(); | ||||
|                         if (nextByte != -1) | ||||
|                         { | ||||
|                             byte[] temp = new byte[readBuffer.Length * 2]; | ||||
|                             Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length); | ||||
|                             Buffer.SetByte(temp, totalBytesRead, (byte)nextByte); | ||||
|                             readBuffer = temp; | ||||
|                             totalBytesRead++; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 byte[] buffer = readBuffer; | ||||
|                 if (readBuffer.Length != totalBytesRead) | ||||
|                 { | ||||
|                     buffer = new byte[totalBytesRead]; | ||||
|                     Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead); | ||||
|                 } | ||||
|                 return buffer; | ||||
|             } | ||||
|             finally | ||||
|             { | ||||
|                 if (stream.CanSeek) | ||||
|                 { | ||||
|                     stream.Position = originalPosition; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user