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[]数据?
...全文
1511 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]
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

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

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

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