C# Stream转换成byte[],急!!求解。。。C#

Ai2015WER 2011-04-19 08:02:51
filepath=“http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg”;
Stream stream=WebRequest.Create(filepath).GetResponse().GetResponseStream();

1.怎样获取stream流的大小?stream.Length是不行的.
2.怎样将流转换成byte[]数据?
...全文
1391 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ai2015WER 2011-08-16
  • 打赏
  • 举报
回复
谢谢大家,问题已经解决。综合了13~15楼的建议。
极地_雪狼 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuxing2006 的回复:]
记住了,经常会用到的

C# code

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
Stream stream = WebRequest.Create(filepath).GetResponse().GetResponse……
[/Quote]

顶,顺便做个记号。
Dobzhansky 2011-04-19
  • 打赏
  • 举报
回复
基于 fid 的unix i/o
基于 handle 的 win i/o
基于 stream 的 .net i/o

都是一些一致化的抽象,底下实现是千差万别的, 有些流是不能提前知道长度的哦。
wuxing2006 2011-04-19
  • 打赏
  • 举报
回复
记住了,经常会用到的

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
Stream stream = WebRequest.Create(filepath).GetResponse().GetResponseStream();

int size = 1024;
int read = 0;
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[size];
do
{
buffer = new byte[size];
read = stream.Read(buffer, 0, size);
ms.Write(buffer, 0, read);
} while (read >= size);

Console.WriteLine(ms.Length.ToString());
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loveyan52152112 的回复:]
C# code

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
MemoryStream stream = (MemoryStream)WebRequest.Create(filepath).GetResponse().GetResponseStrea……
[/Quote]

+1
Stream类有很多子类,转换一下就行了
dreamrising 2011-04-19
  • 打赏
  • 举报
回复
二楼正解,我都是这么使用的
Just4life 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loveyan52152112 的回复:]
C# code

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
MemoryStream stream = (MemoryStream)WebRequest.Create(filepath).GetResponse().GetResponseStrea……
[/Quote]

++
白鸽 2011-04-19
  • 打赏
  • 举报
回复

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
MemoryStream stream = (MemoryStream)WebRequest.Create(filepath).GetResponse().GetResponseStream();
byte[] buffers = stream.ToArray();
Ai2015WER 2011-04-19
  • 打赏
  • 举报
回复
filepath=“http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg”;
Stream stream=WebRequest.Create(filepath).GetResponse().GetResponseStream();

1.怎样获取stream流的大小?stream.Length是不行的.
2.怎样将流转换成byte[]数据?
inso2010 2011-04-19
  • 打赏
  • 举报
回复


string filepath = "http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
WebResponse wr = WebRequest.Create(filepath).GetResponse();
Stream stream =wr .GetResponseStream();
long length = wr.ContentLength;
byte[] by = new byte[length];
stream.Read(by, 0, (int)length);
追豆豆的人 2011-04-19
  • 打赏
  • 举报
回复
BinaryReader br = new BinaryReader(response.GetResponseStream());
byte[] buffer = br.ReadBytes(size);
qldsrx 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jpr1990 的回复:]
还是不行,报错:

C# code
无法将类型为“System.Net.ConnectStream”的对象强制转换为类型“System.IO.MemoryStream”。


引用 2 楼 loveyan52152112 的回复:
C# code
……
[/Quote]
你这种情况并不罕见,看似是流,但是无法获取长度,多数在网络流上出现。
可以通过流复制的方式,提供你一个通用函数,对于多数网络流都可用。
        private void CopyStream(Stream instream, Stream outstream)
{
const int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = instream.Read(buffer, 0, bufferLen)) > 0)
{
outstream.Write(buffer, 0, count);
}
}
Ai2015WER 2011-04-19
  • 打赏
  • 举报
回复
还是不行,报错:
无法将类型为“System.Net.ConnectStream”的对象强制转换为类型“System.IO.MemoryStream”。
[Quote=引用 2 楼 loveyan52152112 的回复:]
C# code

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
MemoryStream stream = (MemoryStream)WebRequest.Create(filepath).GetResponse().GetResponseStrea……
[/Quote]
hjx398 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuxing2006 的回复:]
记住了,经常会用到的

C# code

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
Stream stream = WebRequest.Create(filepath).GetResponse().GetResponse……
[/Quote]

do
{
buffer = new byte[size];
read = stream.Read(buffer, 0, size);
ms.Write(buffer, 0, read);
}
while (read >= size);//这句有误,有些站点会获取到的数据不全,我前几天就遇到过,可能是因为站点发送过来的数据如一次发送的数据不是buffer 的整数倍时,还没有等数据发送完就退出循环了.应该写成 while (read >0);

Ai2015WER 2011-04-19
  • 打赏
  • 举报
回复
你的这段代码,byte数组的大小被定义死了呀,图片的大小是动态的呀。怎么处理呢?[Quote=引用 7 楼 wuxing2006 的回复:]
记住了,经常会用到的

C# code

string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e029jw1dfzrlqr07kj.jpg";
Stream stream = WebRequest.Create(filepath).GetResponse().GetResponse……
[/Quote]

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧