标签: memorystream

C#到Java:Base64String,MemoryStream,GZipStream

我有一个在.NET中压缩过的Base64字符串,我想将其转换回Java中的字符串。我正在寻找与C#语法等效的Java,尤其是:

  • Convert.FromBase64String
  • 内存流
  • 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);
     }
}
Run Code Online (Sandbox Code Playgroud)

任何指针表示赞赏。

c# java memorystream gzipstream gzipinputstream

5
推荐指数
1
解决办法
7658
查看次数

与.Net Mail附件一起使用时,处置MemoryStream

我正在使用MemoryStream从存储在数据库中的二进制文件中添加附件。我的问题是我想正确处理MemoryStream。使用“ using”语句很容易做到这一点,但是当我有多个附件时,我不知道如何正确处理多个MemoryStream。

有没有很好的方法可以遍历并附加文件,但是同时正确处理了我要附加的MemoryStreams?当我尝试在使用smtp之前刷新/关闭时,通过错误发送它,指出流已经关闭。

任何建议,将不胜感激。

.net c# idisposable memorystream using-statement

5
推荐指数
2
解决办法
3000
查看次数

从MemoryStream返回时,ASP.net MVC ActionResult会破坏excel文件

我在Controller中有以下操作

public ActionResult DownloadExcel()
        {
            //create and populate Excel file here
            C1XLBook testBook = new C1XLBook(); 
            //populate it here

            MemoryStream ms = new MemoryStream();
            testBook.Save(ms, FileFormat.Biff8);

            return File(ms, "application/ms-excel", "test-file.xls");           
        }
Run Code Online (Sandbox Code Playgroud)

打开文件时,我收到Excel消息,指出该文件与扩展名不匹配,文件打开已损坏.

如果我将文件保存在硬盘驱动器上并从那里返回,一切都很好:

return base.File(@"C:\LOGS\test-file.xls", "application/ms-excel", "test-excel.xls");
Run Code Online (Sandbox Code Playgroud)

我最初认为保存功能在将其保存到MemoryStream时会破坏它,所以我保存并重新加载它并且很好地传回给用户 - 当保存在硬盘驱动器上并从那里返回时,而不是从的MemoryStream

有任何想法吗?我不太喜欢将文件保存在硬盘上....此外我应该能够将它保存到MemoryStream并从那里返回它?

我有一个预感,也许MemoryStream不应该用于返回MVC中的文件,因为每个请求都是隔离的?

excel memorystream asp.net-mvc-3

5
推荐指数
1
解决办法
2588
查看次数

如何同时将一个文件复制到多个位置

我想找到一种方法将一个文件同时复制到多个位置(使用C#).

意味着我不希望原始文件只被读取一次,并将文件"粘贴"到另一个位置(在本地网络上).

就我的测试给我看的那样

File.Copy() 
Run Code Online (Sandbox Code Playgroud)

将永远再次阅读来源.

据我所知,即使在使用内存时,该内存片也会被锁定.

所以基本上,我想模仿"复制 - 粘贴"形式的一个"复制"和多个"粘贴",而无需再次从硬盘驱动器重新读取.

为什么?因为最终,我需要将一个文件夹(超过1GB)复制到许多计算机,瓶颈是我需要读取源文件的部分.

那么,甚至可以实现吗?

c# file-io memorystream copy file-copying

5
推荐指数
1
解决办法
5104
查看次数

MemoryStream使用多少内存?

我有一台2 GB的机器.在运行我的exe之前,我有1.1 GB的可用内存.当我运行下面只能找到一行的exe时,我就会出现内存异常.

我期待以下行使用大约6亿字节的内容.MemoryStream类使用的内存多于初始化容量吗?

MemoryStream memory = new MemoryStream(600000000);
Run Code Online (Sandbox Code Playgroud)

.net memorystream

5
推荐指数
1
解决办法
358
查看次数

获取Streamreader的长度

我如何获得a的长度StreamReader,因为我知道将不再写入任何内容。我以为也许可以将所有数据传递给a MemoryStream,该方法有一个称为的方法Length,但是我对如何将byte []附加到a感到困惑MemoryStream

private void Cmd(string command, string parameter, object stream)
        {

            StreamWriter writer = (StreamWriter)stream;
            StreamWriter input;
            StreamReader output;

            Process process = new Process();

            try
            {
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardInput = true;
                process.StartInfo.FileName = "cmd";
                process.Start();

                input = process.StandardInput;
                output = process.StandardOutput;
                input.WriteLine(command + " " + parameter);
                input.WriteLine("exit");

                using (MemoryStream ms = new MemoryStream())
                {
                    int length = 1024;
                    char[] charbuffer = new char[length];
                    byte[] …
Run Code Online (Sandbox Code Playgroud)

c# memorystream streamreader

5
推荐指数
2
解决办法
2万
查看次数

C#中Java的ByteBuffer.wrap相当于什么?

byte[] input = new byte[] {2, 4, 5, 2, 1};
ByteBuffer bytebuf = ByteBuffer.wrap(input);
Run Code Online (Sandbox Code Playgroud)

ByteBuffer.wrap(byte[] array) 方法使缓冲区和数组相互连接,对缓冲区的修改将导致数组被修改,反之亦然.

ByteBufferC#中的等价物是memorystream.但我不知道如何连接内存流与数组喜欢的ByteBuffer.wrap()方法.

有人能说出ByteBuffer.wrap()C#中的等价物吗?我到处搜索但根本找不到答案.

提前致谢.

c# java bytebuffer memorystream

5
推荐指数
1
解决办法
6885
查看次数

试图将ZipArchiveEntry转换为byte []

我试图获取一个ZipArchiveEntrys 列表并将它们转换为字节数组,但我在逻辑上遇到了一个问题.

到目前为止,我试图将其转换为a MemoryStream将其转换为byte [],如下所示:

public static void ScanUpload(List<ZipArchiveEntry> scan)
{
    foreach (var s in scan)
    {                           
        using (var ms = new MemoryStream())
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道接下来会发生什么.或者即使这是解决这个问题的正确方法.有人能帮忙吗?

c# memorystream

5
推荐指数
1
解决办法
4246
查看次数

来自内存流的电子邮件附件在C#中显示为空白

我能够通过邮件发送附件,但附件内容为空白,大小显示为0字节.

在通过互联网进行一些搜索后发现我们需要将内存流位置重置为0才能从头开始.

我也试过了,但它似乎无法正常工作.你能帮忙吗?

请在下面找到我的代码段:

注意:我能够保存工作簿,并且数据存在于保存的工作簿中.

        MemoryStream memoryStream = new MemoryStream();

        StreamWriter writer = new StreamWriter(memoryStream);
        writer.Write(xlWorkbook);
        writer.Flush();
        memoryStream.Position = 0;
        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient("smtpclient");
        mail.From = new MailAddress("from@gmail.com");
        mail.To.Add("To@gmail.com");
        mail.Subject = "Entry";
        mail.Body = "Hello, PFA ";
        System.Net.Mail.Attachment attachment;

        attachment = new System.Net.Mail.Attachment(memoryStream,"xls");
        attachment.ContentDisposition.FileName = "Input" + DateTime.Now.ToString("yyyyMMdd_hhss") + ".xls";
        mail.Attachments.Add(attachment);
        SmtpServer.Port = 465;
        SmtpServer.UseDefaultCredentials = false;
        SmtpServer.Credentials = new System.Net.NetworkCredential("Username", "password");
        SmtpServer.EnableSsl = true;
        SmtpServer.Send(mail);
        writer.Dispose();
Run Code Online (Sandbox Code Playgroud)

.net c# email memorystream email-attachments

5
推荐指数
1
解决办法
1万
查看次数

什么定义了内存流的容量

我正在使用以下代码计算对象(正在填充的列表)的大小:

 long myObjectSize = 0;
 System.IO.MemoryStream memoryStreamObject = new System.IO.MemoryStream();
 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryBuffer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
 binaryBuffer.Serialize(memoryStreamObject, myListObject);
 myObjectSize = memoryStreamObject.Position;
Run Code Online (Sandbox Code Playgroud)

最初的容量memoryStreamObject1024 在此处输入图片说明

后来(在列表中添加了更多元素之后)显示为2048。 在此处输入图片说明

并且它似乎随着流内容的增加而增加。那么在这种情况下容量的目的是什么?

c# memory memorystream capacity

5
推荐指数
2
解决办法
3905
查看次数