im cố gắng chuyển đổi một luồng (System.Net.ConnectStream) thành một mảng byte. Bất kỳ suy nghĩ/ví dụ về cách này có thể được thực hiện?C# Làm thế nào để tôi chuyển đổi System.Net.ConnectStream thành một byte [] (mảng)
Trả lời
Stream sourceStream = ... // the ConnectStream
byte[] array;
using (var ms = new MemoryStream())
{
sourceStream.CopyTo(ms);
array = ms.ToArray();
}
Trong trường hợp này, bạn sử dụng bộ nhớ nhiều gấp 3 lần luồng của bạn. Nó không phải là quá tốt nếu các dòng của bạn có thể mất nhiều bộ nhớ hơn máy tính của bạn có. Trong trường hợp này, bạn cần sử dụng Stream.Read để đọc các khối dữ liệu từ luồng nguồn và làm việc với các khối này. –
Lưu ý rằng 'Stream.CopyTo' chỉ khả dụng trong .NET 4.0 trở lên. Xem câu trả lời của Kevin cho phiên bản 4.0 trước. –
Cảm ơn người đàn ông! nó hoạt động! @Thomas – Mulaiko
Hãy thử này ...
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);
}
}
Đó là mẹo, nếu bạn đang sử dụng bộ đệm số tròn (ví dụ như 64k trong ví dụ), bạn có thể thay thế '65536' bằng '64 << 10' ở phía bên trái là số của bạn và ở phía bên phải '0 = Byte, 10 = Kilobites, 20 = Megabyte, 30 = Gigabyte, ect ...' Vì vậy, một bộ đệm 2MB sẽ là '2 << 20' –
Ngoài ra, tại sao bạn khóa trên _lock? nếu bạn đang cố gắng để có quyền truy cập độc quyền vào luồng, bạn nên khóa một thứ gì đó gắn với luồng (hoặc gọi [Stream.Synchronized] (http://msdn.microsoft.com/en-us/library/system.io. stream.synchronized.aspx) trước khi nó được truyền vào). Bạn không làm gì trong mã của bạn sẽ bị hỏng nếu bạn chuyển đổi đã thực hiện hai luồng *** khác nhau cùng một lúc –
Trong một câu trả lời từ Freeetje có phương pháp bằng văn bản có tên là 'ReadToEnd'. Làm việc như một sự quyến rũ cho tôi ...
How do I get the filesize from the Microsoft.SharePoint.Client.File object?
- 1. Làm thế nào để chuyển đổi chuỗi thành mảng byte?
- 2. Làm thế nào để chuyển đổi một mảng byte thành đôi trong C?
- 3. Làm thế nào để chuyển đổi một byte thành bit?
- 4. Làm thế nào để chuyển đổi một mảng byte thành một mảng int?
- 5. Làm thế nào tôi có thể chuyển đổi một mảng byte thành một double và back?
- 6. C#: Chuyển đổi mảng Byte thành một phao
- 7. Làm thế nào để bạn chuyển đổi một mảng byte thành một thể hiện Bitmap (.NET)?
- 8. Làm thế nào để chuyển đổi mảng byte được mã hóa g729 thành .WAV trong C#?
- 9. chuyển đổi mảng chuỗi thành mảng byte
- 10. Làm thế nào để chuyển đổi một mảng byte thành Base64 trong Java?
- 11. Làm thế nào để chuyển đổi một mảng float thành một byte [] và ngược lại?
- 12. Làm thế nào để chuyển đổi một sbyte [] thành byte [] trong C#?
- 13. Làm thế nào để chuyển đổi byte [] thành InputStream?
- 14. Mảng kép chuyển đổi thành mảng byte
- 15. Chuyển đổi một mảng chuỗi thành mảng byte
- 16. chuyển đổi bitmap thành mảng byte
- 17. F #: Chuyển đổi chuỗi thành một mảng byte
- 18. Chuyển mảng byte thành chuỗi trong C#
- 19. Làm thế nào để chuyển đổi loại 'byte []' thành 'System.Data.Linq.Binary'
- 20. Làm thế nào để chuyển đổi chuỗi Java thành byte []?
- 21. Go: làm thế nào để chuyển đổi struct thành [] byte?
- 22. Chuyển đổi BitmapImage thành mảng Byte
- 23. Chuyển đổi int thành mảng byte trong C?
- 24. Làm thế nào để chuyển đổi mảng băm băm C# thành chuỗi để chuyển sang API?
- 25. Chuyển đổi java.io.StringWriter thành mảng byte []
- 26. làm thế nào để chuyển đổi chuỗi thành byte [] trong C#
- 27. Làm cách nào để chuyển đổi bit thành byte?
- 28. Làm thế nào để chuyển đổi một chuỗi thành một byte [] trong Clojure?
- 29. Chuyển đổi mảng byte thành PNG/JPG
- 30. Chuyển đổi đối tượng thành mảng byte trong C#
Chỉ cần đọc nó vào bộ đệm ('byte []'). Xem ['Stream.Read'] (http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx) trên MSDN. – Oded
@Oded, vâng, nhưng không phải là cách dễ dàng để sao chép toàn bộ nội dung của luồng (trừ khi bạn biết độ dài của nó, không phải lúc nào cũng như trường hợp của ConnectStream) –