Tag: memorystream

一个大的System.IO.MemoryStream会导致我的应用程序的内存使用量急剧增加吗?

我正在构建一个允许用户从URL下载文件的库。 我正在考虑的一个选项是让用户为文件指定预期的MD5校验和; 库的GetFile(string url)函数确保下载的流的校验和与用户指定的校验和匹配。 知道HttpWebResponse.GetResponseStream()返回的NetworkStream是不可寻的,我找到了一种复制Stream的方法,这要归功于这个问题的答案: 如何在C#中读取两次Http响应流? 。 在我走得更远之前,我想弄清楚这种重复的记忆含义是什么; 不幸的是,谷歌和MSDN上的多次搜索已经化为乌有。 该库对要下载的文件的大小没有限制。 我的问题是,如果用户选择2GB文件,.NET 2.0中的MemoryStream实现是否足够智能,足以有效地使用PageFile和RAM,系统不会因VM崩溃而开始爬行? 此外,Jon Skeet对另一个问题的评论给了我一些思考 – 他断言即使在处理了MemoryStream之后,内存也不是100%免费的。 我如何以及何时确保实际释放内存? 它会根据系统的要求(和必要性)发布吗? 谢谢,Manoj

如何克隆MemoryStream对象?

我有一个MemoryStream对象,它由Stream类型参数传递 ( Stream是C#中的抽象类)。 我想克隆他,并创建另一个MemoryStream对象的一侧与原始的当前位置,并创建一个新的XMLReader ,所以我将能够阅读其内容。 这就是我做的,它不起作用(调试标有// * – > newReader有{None}值) 假设 :您在方法内部并具有Stream currentStream引用。 var x = new XmlReaderSettings(); x.IgnoreWhitespace = true; using (var newMemoryStream = new MemoryStream()) { stream.CopyTo(newMemoryStream); using (var newReader = XmlReader.Create(newMemoryStream,x)) //* { Doing some stuff… } }

如何合并两个内存流?

我有两个MemoryStream实例。 如何将它们合并到一个实例中? 好吧,现在我无法从一个MemoryStream复制到另一个。 这是一个方法: public static Stream ZipFiles(IEnumerable filesToZip) { ZipStorer storer = null; MemoryStream result = null; try { MemoryStream memory = new MemoryStream(1024); storer = ZipStorer.Create(memory, GetDateTimeInRuFormat()); foreach (var currentFilePath in filesToZip) { string fileName = Path.GetFileName(currentFilePath.FullPath); storer.AddFile(ZipStorer.Compression.Deflate, currentFilePath.FullPath, fileName, GetDateTimeInRuFormat()); } result = new MemoryStream((int) storer.ZipFileStream.Length); storer.ZipFileStream.CopyTo(result); //Does not work! //result’s length […]

Web Api 2 – 如何从HTTPGET返回映像(来自Azure存储的MemoryStream)而不保存到磁盘?

我正在使用带有C#和Azure的Web Api 2,以及如何返回图像(从Memorystream基础)以在页面上显示的问题… 这是我的Controller HTTPGET [Route(“api/PhotoSubmit/GetPhoto/{id}”)] [HttpGet] public HttpResponseMessage GetPhotoById(int id) { StorageServices storage = new StorageServices(); MemoryStream ms = storage.DownloadBlob(id); // return what ? } 这是servicecall的开头: $http({ method: ‘GET’, url: ‘api/PhotoSubmit/GetPhoto/’ + $routeParams.id, accept: ‘application/json’ }) .success(function(result) { // How do i handle the result and what HTML should i use ? <img ? […]

MemoryStream的byte 缓冲区可以变化吗?

我正在使用MemoryStream将对象序列化为byte[] : byte[] serialized = new byte[1000]; using (MemoryStream stream = new MemoryStream(serialized)) using (TextWriter textWriter = new StreamWriter(stream)) serializer.Serialize(textWriter, stuffToSerialize); 有没有什么方法可以根据stuffToSerialize的大小设置’serialized’来增长?

如何用0xFF字节填充MemoryStream?

我有一个MemoryStream ,它是在运行时从File创建的。 然后编辑MemoryStream并删除一些字节。 现在我必须维护一个常量文件大小,所以我必须用0xFF字节填充MemoryStream .. 进行此操作的最快方法是什么? 我知道,我总是可以遍历MemoryStream大小并添加0xFF,但我需要知道更快更有效的方法!

C#到Java:Base64String,MemoryStream,GZipStream

我有一个在.NET中被gzip压缩的Base64字符串,我想将它转换回Java中的字符串。 我正在寻找C#语法的一些Java等价物,特别是: Convert.FromBase64String 的MemoryStream GZipStream 这是我想要转换的方法: public static string Decompress(string zipText) { byte[] gzipBuff = Convert.FromBase64String(zipText); using (MemoryStream memstream = new MemoryStream()) { int msgLength = BitConverter.ToInt32(gzipBuff, 0); memstream.Write(gzipBuff, 4, gzipBuff.Length – 4); byte[] buffer = new byte[msgLength]; memstream.Position = 0; using (GZipStream gzip = new GZipStream(memstream, CompressionMode.Decompress)) { gzip.Read(buffer, 0, buffer.Length); } return Encoding.UTF8.GetString(buffer); […]

如何从MemoryStream中删除数据

我不能让这个工作。 我有一个MemoryStream对象。 此类有一个Position属性,可以告诉您已读取的字节数。 我想要做的是删除0和位置-1之间的所有字节 我试过这个: MemoryStream ms = … ms.SetLength(ms.Length – ms.Position); 但在某些时候我的数据被破坏了。 所以我最终做到了这一点 MemoryStream ms = … byte[] rest = new byte[ms.Length – ms.Position]; ms.Read(rest, 0, (int)(ms.Length – ms.Position)); ms.Dispose(); ms = new MemoryStream(); ms.Write(rest, 0, rest.Length); 哪个有效,但效率不高。 任何想法我怎么能让这个工作? 谢谢

MemoryStream更换?

几个星期前,我读到了一些关于.Net 4 / 4.5中新类的内容,它比MemoryStream更好,但我似乎无法再找到它了。 我查看了IO命名空间 ,找不到任何东西。 有人记得读过那样的东西吗? 谢谢

我如何在.NET中“分叉”一个流?

如前所述,当BinaryReader或BinaryWriter关闭时,其底层Stream也会关闭(aargh)。 考虑这种情况:例程R通过MemoryStream,比如M ; 我想给M写一些东西,然后将它传递给另一个例程进行更多处理(不一定是写)。 为方便起见,我想在一个BinaryWriter中包装M来完成我的写作。 写完之后,我已经完成了BinaryWriter而不是M void R(MemoryStream M) { using (B = new BinaryWriter(M)) { // write some stuff using B } S(M); // now pass M to another routine for further processing } 但是,我不能在不关闭M情况下处理BinaryStream。 问:有没有办法做以下任何一种情况? 从MemoryStream中提取底层byte [], 克隆一个流 它关闭后重新打开一个流