Tag: memorystream

通过BinaryReader将字节数组解压缩为字符串,产生空字符串

我试图解压缩一个字节数组,并使用二进制阅读器将其转换为字符串。 当执行以下代码时,inStream位置从0更改为数组的长度,但str始终为空字符串。 BinaryReader br = null; string str = String.Empty; using (MemoryStream inStream = new MemoryStream(pByteArray)) { GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress); BinaryReader br = new BinaryReader(zipStream); str = br.ReadString(); inStream.Close(); br.Close(); }

从内存流中读取存储的PDF

我正在使用C#和SQLServer 2012开发一个数据库项目。在我的一个表单中,我有一个PDF文件,其中包含一些存储在表中的其他信息。 这是成功的,但是当我想检索存储的信息时,我有一个显示PDF文件的问题,因为我无法显示它,我不知道如何显示它。 我读过一些文章说它无法用内存流中的Adobe PDF查看器显示,有什么办法吗? 这是我从数据库中检索数据的代码: sql_com.CommandText = “select * from incoming_boks_tbl where [incoming_bok_id]=@incoming_id and [incoming_date]=@incoming_date”; sql_com.Parameters.AddWithValue(“incoming_id”,up_inco_num_txt.Text); sql_com.Parameters.AddWithValue(“incoming_date”, up_inco_date_txt.Text); sql_dr = sql_com.ExecuteReader(); if(sql_dr.HasRows) { while(sql_dr.Read()) { up_incoming_id_txt.Text = sql_dr[0].ToString(); up_inco_num_txt.Text = sql_dr[1].ToString(); up_inco_date_txt.Text = sql_dr[2].ToString(); up_inco_reg_txt.Text = sql_dr[3].ToString(); up_inco_place_txt.Text = sql_dr[4].ToString(); up_in_out_txt.Text = sql_dr[5].ToString(); up_subj_txt.Text = sql_dr[6].ToString(); up_note_txt.Text = sql_dr[7].ToString(); string file_ext = sql_dr[8].ToString();//pdf file […]

MemoryStream:为什么在readByte之后转换为byte

在MS的这个例子中 ,你会注意到在我们从内存流中读取一个字节后,它会进入一个int,然后必须将其转换为byte。 令我感到奇怪的是,像.ReadByte()这样的函数.ReadByte()不返回一个字节。 MS有这样做的原因吗? // Read the remaining bytes, byte by byte. while(count < memStream.Length) { byteArray[count++] = Convert.ToByte(memStream.ReadByte()); } 一个念头发生在我身上。 也许这取决于使用情况。 也许ReadByte()通常用于检索短长度,这些后续因素通过长度变化在检索中消耗 int length=ms.ReadByte(); ms.Read(buf,0,lenth); 即你可以使用没有演员表的长度。 这是一个足够好的理由吗?

将memorystream对象序列化为字符串

现在我正在使用XmlTextWriter将MemoryStream对象转换为字符串。 但我不知道是否有更快的方法将内存流序列化为字符串。 我按照此处给出的代码进行序列化 – http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp 编辑 流到字符串 ms.Position = 0; using (StreamReader sr = new StreamReader(ms)) { string content = sr.ReadToEnd(); SaveInDB(ms); } String to Stream string content = GetFromContentDB(); byte[] byteArray = Encoding.ASCII.GetBytes(content); MemoryStream ms = new MemoryStream(byteArray); byte[] outBuf = ms.GetBuffer(); //error here

播放内存流中的video

到目前为止在任何地方找不到任何满意的答案…… 我正在开发一个C#WinForms .NET3.5应用程序,它需要从数据库BLOB加载video文件并在应用程序窗口中播放它。 数据库是本地文件(不涉及服务器)。 我不认为将文件保存到硬盘驱动器是一个很好的解决方案,因为它可能很耗时,而且我已经将文件放在内存流中了。 我需要能够播放尽可能多的video格式(编解码器?)。 包括divX,XVid,mpeg,avi,3gp等。 我正在寻找易于使用的工作代码示例或现有的第三方组件。 像DirectShow或VLC这样的建议几乎不需要video渲染,filter,图形和什么不是主要学位,除非有一个工作样本,否则这些建议是不可能的。 有任何想法吗? 谢谢。

在c#中从memorystream保存为jpeg

我有一个如下所示的方法将图像保存为jpeg。 我希望保存所有具有相同高度和宽度的图片,而不会失真。 我怎样才能做到这一点? 请帮忙 public void SaveFileOnDisk(MemoryStream ms, string FileName) { try { string appPath = HttpContext.Current.Request.ApplicationPath; string physicalPath = HttpContext.Current.Request.MapPath(appPath); string strpath = physicalPath + “\\Images”; string WorkingDirectory = strpath; System.Drawing.Image imgSave = System.Drawing.Image.FromStream(ms); Bitmap bmSave = new Bitmap(imgSave); Bitmap bmTemp = new Bitmap(bmSave); Graphics grSave = Graphics.FromImage(bmTemp); grSave.DrawImage(imgSave, 0, 0, imgSave.Width, imgSave.Height); bmTemp.Save(WorkingDirectory […]

将图像文件保存到sql Server并将字节数组转换为图像

我将图像存储在数据库中,并希望将它们从字节数组转换为图像。 我没有问题将对象转换为字节数组但是在尝试从字节数组转换为图像时出现“参数无效”错误。 我传递给我的方法的对象来自数据集行。 存储过程 USE [—————-] GO /****** Object: StoredProcedure [dbo].[usp_imageloader_add_test] Script Date: 01/16/2012 09:19:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[usp_imageloader_add_test] @p_Image Image as INSERT into Test_Images VALUES(@p_Image) 上传文件控制 /将图像文件转换为字节数组并将数据保存到数据库 protected void btnUpload_Click(object sender, EventArgs e) { if (ctrlUpload.PostedFile != null) { if (ctrlUpload.PostedFile.ContentLength > 0) { // Get […]

为什么我没有内存泄漏.Dispose()我将.Save()的位图发送到MemoryStream?

假设我创建了一个位图 Bitmap bitmap = new Bitmap(320, 200); 当我把它写到某个流(在我的情况下,它是一个HttpResponseStream,由HttpListenerResponse给出),一切都很好: bitmap.Save(stream, ImageFormat.Png); 我不需要bitmap.Dispose(),位图使用的资源将自动清理。 直接将Png写入不可搜索的流的问题是,它可能导致GDI +中发生一般错误 ,当我在Azure上尝试我的Asp应用程序时发生这种情况。 这就是我的代码现在的样子: using (MemoryStream ms = new MemoryStream()) { bitmap.Save(ms, ImageFormat.Png); ms.WriteTo(stream); } 现在除非我之后使用bitmap.Dispose(),否则会泄漏。 重新提出问题以获得更具体的答案: 为什么这种位图内存的泄漏似乎取决于我将其保存到哪种类型的流? 更新:正如我在评论中被问到我是否确定它是一个泄漏。 在压力测试中反复调用上面的内容,我的w3wp进程将进入gig和gig的内存使用,直到我的机器开始交换,它将无法清理。

使用MemoryStream写出XML

我注意到有两种不同的方法可以将数据写入XML文件(为简洁起见,省略了error handling)。 第一种方法是构建XML文档,然后将XML保存到文件中: using (XmlWriter writer = XmlWriter.Create(fileName)) { writer.WriteStartDocument(true); writer.WriteStartElement(“parentelement”); writer.WriteEndElement(); writer.WriteEndDocument(); } 第二种方法是创建MemoryStream,然后将MemoryStream保存到文件中: XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; MemoryStream ms = new MemoryStream(); using (XmlWriter writer = XmlWriter.Create(ms, settings)) { writer.WriteStartDocument(true); writer.WriteStartElement(“parentelement”); writer.WriteEndElement(); writer.WriteEndDocument(); } using (FileStream fs = File.Open(fileName, FileMode.Create, FileAccess.Write)) { ms.WriteTo(fs); ms.Dispose(); } 我猜测使用MemoryStream的逻辑是确保在尝试保存文件之前可以构建XML文件。 在将条目添加到XML文件中时,MemoryStream方法是否会提供Atomic写入事件和/或防止写入问题? 任何人都可以解释这是否真的是必要的,或者只是一种过度的方法来为我的项目添加不必要的代码行?

内存流是否像文件流一样阻塞

我正在使用一个库,需要我提供一个实现此接口的对象: public interface IConsole { TextWriter StandardInput { get; } TextReader StandardOutput { get; } TextReader StandardError { get; } } 然后,对象的读者将被库使用: IConsole console = new MyConsole(); int readBytes = console.StandardOutput.Read(buffer, 0, buffer.Length); 通常,实现IConsole的类具有来自外部进程的StandardOutput流。 在这种情况下,console.StandardOutput.Read通过阻塞来调用,直到有一些数据写入StandardOutput流。 我要做的是创建一个测试IConsole实现,该实现使用MemoryStreams和echo在StandardInput上显示的任何内容返回到StandardInput。 我试过了: MemoryStream echoOutStream = new MemoryStream(); StandardOutput = new StreamReader(echoOutStream); 但问题是console.StandardOutput.Read将返回0而不是阻塞,直到有一些数据。 无论如何,如果没有可用数据或者我可以使用的内存流有什么不同,我可以得到一个MemoryStream来阻止吗?