MemoryStreamPython中是否存在一些C#模拟(可以让我将某些源的二进制数据直接写入内存)?我将如何使用它?
我的代码使用MemoryStream来序列化/反序列化网络中的对象.我想在我的课程中重复使用单个MemoryStream,而不是每次需要通过网络发送内容时创建一个新的MemoryStream.
有谁知道如何做到这一点?
代码段:
// Serialize object to buffer
public byte[] Serialize(object value)
{
if (value == null)
return null;
MemoryStream _memoryStream = new MemoryStream();
_memoryStream.Seek(0, 0);
_bf.Serialize(_memoryStream, value);
return _memoryStream.GetBuffer();
}
// Deserialize buffer to object
public object Deserialize(byte[] someBytes)
{
if (someBytes == null)
return null;
MemoryStream _memoryStream = new MemoryStream();
_memoryStream.Write(someBytes, 0, someBytes.Length);
_memoryStream.Seek(0, 0);
var de = _bf.Deserialize(_memoryStream);
return de;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我试图解压缩一个字节数组,并使用二进制读取器将其转换为字符串.执行以下代码时,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();
}
Run Code Online (Sandbox Code Playgroud) 我将图像存储在数据库中,并希望将它们从字节数组转换为图像.我没有问题将对象转换为字节数组但是在尝试从字节数组转换为图像时出现"参数无效"错误.我传递给我的方法的对象来自数据集行.
存储过程
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)
Run Code Online (Sandbox Code Playgroud)
上传文件控制 /将图像文件转换为字节数组并将数据保存到数据库
protected void btnUpload_Click(object sender, EventArgs e)
{
if (ctrlUpload.PostedFile != null)
{
if (ctrlUpload.PostedFile.ContentLength > 0)
{
// Get Posted File
HttpPostedFile objHttpPostedFile = ctrlUpload.PostedFile;
// Find its length and convert it to byte array
int ContentLength = objHttpPostedFile.ContentLength;
// Create Byte Array
byte[] bytImg = …Run Code Online (Sandbox Code Playgroud) 我有一个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...
}
}
Run Code Online (Sandbox Code Playgroud) 我多次使用MemoryStream时遇到问题.
例:
For Each XImage As XImage In pdfDocument.Pages(pageCount).Resources.Images
Dim imageStream As New MemoryStream()
XImage.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg)
' some further processing
imageStream.Close()
imageStream.Dispose()
Next
Run Code Online (Sandbox Code Playgroud)
这段代码循环显示PDF文件页面上的图像.该文件最多可包含500页,每页可提供5张图像.它导致数千次迭代.问题是MemoryStream没有被释放,导致Out of Memory异常.XImage通常大约为250 kB.
我在这里使用Aspose.PDF库来处理PDF(XImage是这个库中的一个类),但没关系.我试图做一个简单的例子,我只是创建一个新的MemoryStream并将虚拟位图保存到它.它导致了同样的问题.
我也尝试使用FileStream而不是MemoryStream,但它的行为相同.
任何帮助赞赏.
谢谢
吉日
我想要减少图像尺寸的功能.
该函数应该采用图像URL,检查图像是4MB大小还是更大,如果是,则将其调整为爱人然后4MB并返回字节.
我有下一个方法:
public byte[] ResizeImage(string url)
{
var uri = new Uri(url);
var c = new WebClient();
var oldImgStream = new MemoryStream(c.DownloadData(uri));
if (oldImgStream.Length <= 4194304)
{
return oldImgStream.ToArray();
}
using (var oldImage = new Bitmap(oldImgStream))
using (var newImageStream = new MemoryStream())
{
var format = oldImage.RawFormat;
float resizePercent = (float)4194304 / oldImgStream.Length;
var newImage = ResizeImageByPercent(oldImage, resizePercent);
newImage.Save(newImageStream, format);
return newImageStream.ToArray();
}
}
public static Bitmap ResizeImageByPercent(Bitmap image, float resizePercent)
{
//Set minimum resizePercentage to 80%
resizePercent = …Run Code Online (Sandbox Code Playgroud) 当我将 Bmp 作为流传递时,函数总是返回,
D4-1D-8C-D9-8F-00-B2-04-E9-80-09-98-EC-F8-42-7E
Run Code Online (Sandbox Code Playgroud)
但文件正确保存在磁盘上。当我从磁盘加载 bpm 时,函数返回正确的 MD5。同时传递“new Bitmap(int x, int y);” 不同的值返回相同的 MD5。
为什么会发生?
public static string GetMD5Hash()
{
Bitmap Bmp = new Bitmap(23, 46); //
using (Graphics gfx = Graphics.FromImage(Bmp))
using (SolidBrush brush = new SolidBrush(Color.FromArgb(32, 44, 2)))
{
gfx.FillRectangle(brush, 0, 0, 23, 46);
}
using (var md5 = MD5.Create())
{
using (MemoryStream memoryStream = new MemoryStream())
{
Bmp.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
\//EDITED: Bmp.Save(@"C:\Test\pizdanadysku.bmp"); // Here saving file on disk, im getting diffrent solid color
return BitConverter.ToString(md5.ComputeHash(memoryStream)); //Always return D4-1D-8C-D9-8F-00-B2-04-E9-80-09-98-EC-F8-42-7E …Run Code Online (Sandbox Code Playgroud) 是否有可能从任何html文件中获取由wkhtmltopdf创建的pdf流,并在IE/Firefox/Chrome等中弹出下载对话框?
目前我通过此代码获取我的输出流:
public class Printer
{
public static MemoryStream GeneratePdf(StreamReader Html, MemoryStream pdf, Size pageSize)
{
Process p;
StreamWriter stdin;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\PROGRA~1\WKHTML~1\wkhtmltopdf.exe";
// run the conversion utility
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
// note that we tell wkhtmltopdf to be quiet and not run scripts
psi.Arguments = "-q -n --disable-smart-shrinking " + (pageSize.IsEmpty ? "" : "--page-width " + pageSize.Width + "mm --page-height " …Run Code Online (Sandbox Code Playgroud) 我试图从服务器路由返回一个图像,但我得到一个0字节的图像.我怀疑它与我如何使用它有关MemoryStream.这是我的代码:
[HttpGet]
[Route("edit")]
public async Task<HttpResponseMessage> Edit(int pdfFileId)
{
var pdf = await PdfFileModel.PdfDbOps.QueryAsync((p => p.Id == pdfFileId));
IEnumerable<Image> pdfPagesAsImages = PdfOperations.PdfToImages(pdf.Data, 500);
MemoryStream imageMemoryStream = new MemoryStream();
pdfPagesAsImages.First().Save(imageMemoryStream, ImageFormat.Png);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(imageMemoryStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = pdf.Filename,
DispositionType = "attachment"
};
return response;
}
Run Code Online (Sandbox Code Playgroud)
通过调试,我已经验证了该PdfToImages方法是否正常工作,并且imageMemoryStream从该行填充了数据
pdfPagesAsImages.First().Save(imageMemoryStream, ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)
但是在运行它时,我收到一个正确命名但是为0字节的附件.为了接收整个文件,我需要更改什么?我认为这很简单,但我不确定是什么.提前致谢.
memorystream ×10
c# ×9
.net ×2
image ×2
asp.net ×1
asp.net-mvc ×1
attachment ×1
binaryreader ×1
bitmap ×1
gzipstream ×1
md5 ×1
python ×1
reset ×1
routes ×1
sql-server ×1
stream ×1
vb.net ×1
wkhtmltopdf ×1
xmlreader ×1