Estoy tratando de convertir una secuencia (System.Net.ConnectStream) en una matriz de bytes. ¿Alguna idea/ejemplo sobre cómo se puede hacer esto?C# Cómo convierto System.Net.ConnectStream en un byte [] (matriz)
Respuesta
Stream sourceStream = ... // the ConnectStream
byte[] array;
using (var ms = new MemoryStream())
{
sourceStream.CopyTo(ms);
array = ms.ToArray();
}
En este caso, utiliza la memoria en 3 veces más que tu corriente No es tan bueno si tus transmisiones pueden tomar más memoria que tu computadora. En este caso, debe usar Stream.Read para leer fragmentos de datos de la fuente de flujo y trabajar con estos fragmentos. –
Tenga en cuenta que 'Stream.CopyTo' solo está disponible en .NET 4.0 y versiones posteriores. Vea la respuesta de Kevin para una versión anterior a la 4.0. –
Gracias hombre! ¡esta funcionando! @Thomas – Mulaiko
Prueba esto ...
private static readonly object _lock = new object();
public static byte[] readFullStream(Stream st)
{
try
{
Monitor.Enter(_lock);
byte[] buffer = new byte[65536];
Int32 bytesRead;
MemoryStream ms = new MemoryStream();
bool finished = false;
while (!finished)
{
bytesRead = st.Read(buffer.Value, 0, buffer.Length);
if (bytesRead > 0)
{
ms.Write(buffer.Value, 0, bytesRead);
}
else
{
finished = true;
}
}
return ms.ToArray();
}
finally
{
Monitor.Exit(_lock);
}
}
Aquí hay una sugerencia, si está utilizando un buffer de número redondeado (como 64k en su ejemplo), puede reemplazar '65536' con' 64 << 10' donde el lado izquierdo es su número y en el lado derecho '0 = Bytes, 10 = Kilobites, 20 = Megabytes, 30 = Gigabytes, ect ...' Así que un búfer de 2MB sería '2 << 20' –
Además, ¿por qué está bloqueando _lock? Si está tratando de obtener acceso exclusivo a la transmisión, debe bloquear algo relacionado con la transmisión (o invocar [Stream.Synchronized] (http://msdn.microsoft.com/en-us/library/system.io). stream.synchronized.aspx) antes de que se pase). No está haciendo nada en su código que se rompería si convirtiera dos *** flujos de *** diferentes al mismo tiempo –
En una respuesta de Freeetje hay un método llamado writen 'ReadToEnd'. Trabajó como un encanto para mí ...
How do I get the filesize from the Microsoft.SharePoint.Client.File object?
- 1. ¿Cómo convierto byte [] a stream en C#?
- 2. ¿Cómo convierto una cadena en byte en C#?
- 3. Convierte la lista <byte[]> en un byte [] matriz
- 4. ¿Cómo convierto una matriz de bytes C# en datos estructurados?
- 5. ¿Cómo convierto un byte a un largo en Java?
- 6. ¿Cómo convierto una matriz bidimensional C# a un objeto JSON?
- 7. ¿Cómo convierto una matriz de bytes a Base64 en Java?
- 8. Convertir byte [] en char []
- 9. ¿Cómo convierto una matriz de bytes en una cadena?
- 10. Cómo convertir un sbyte [] en byte [] en C#?
- 11. ¿Cómo convierto una matriz a un hash en Perl?
- 12. ¿Cómo convierto una matriz de bytes Java en una matriz de bytes Scala?
- 13. ¿Cómo convertir un byte [] en datetime en C#?
- 14. cómo convertir cadena a byte [] en C#
- 15. ¿Cómo buscar en una matriz BYTE para un patrón?
- 16. byte Android lotes matriz
- 17. Cómo crear un archivo bmp desde byte [] en C#
- 18. Cómo devolver un byte [] a C# en C++ CLR
- 19. Objective-C, ¿cómo convierto un doble en un int?
- 20. ¿Cómo convierto un decimal a un int en C#?
- 21. ¿Cómo convierto un CString a un doble en C++?
- 22. ¿Cómo convierto nchar en cadena en C#?
- 23. ¿Cómo convierto una matriz de bytes en un archivo y lo abro automáticamente con C#?
- 24. ¿Cómo convierto una cadena en un char * en C++?
- 25. ¿Cómo convierto un largo en una cadena en C++?
- 26. ¿Cómo convierto un doble en una cadena en C++?
- 27. Cadena a byte matriz en UTF-8?
- 28. cómo comparar la matriz Java Byte []?
- 29. Cómo asignar un byte [] para un registro
- 30. ¿Cómo obtener un solo byte de BitArray (sin byte [])?
acaba de leer en una memoria tampón ('byte [] '). Mire ['Stream.Read'] (http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx) en MSDN. – Oded
@Oded, sí, pero no es una manera muy fácil de copiar todo el contenido de la transmisión (a menos que sepa su longitud, que no siempre es el caso con ConnectStream) –