我有一个在.NET中压缩过的Base64字符串,我想将其转换回Java中的字符串。我正在寻找与C#语法等效的Java,尤其是:
这是我想转换的方法:
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)
任何指针表示赞赏。
我正在使用MemoryStream从存储在数据库中的二进制文件中添加附件。我的问题是我想正确处理MemoryStream。使用“ using”语句很容易做到这一点,但是当我有多个附件时,我不知道如何正确处理多个MemoryStream。
有没有很好的方法可以遍历并附加文件,但是同时正确处理了我要附加的MemoryStreams?当我尝试在使用smtp之前刷新/关闭时,通过错误发送它,指出流已经关闭。
任何建议,将不胜感激。
我在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中的文件,因为每个请求都是隔离的?
我想找到一种方法将一个文件同时复制到多个位置(使用C#).
意味着我不希望原始文件只被读取一次,并将文件"粘贴"到另一个位置(在本地网络上).
就我的测试给我看的那样
File.Copy()
Run Code Online (Sandbox Code Playgroud)
将永远再次阅读来源.
据我所知,即使在使用内存时,该内存片也会被锁定.
所以基本上,我想模仿"复制 - 粘贴"形式的一个"复制"和多个"粘贴",而无需再次从硬盘驱动器重新读取.
为什么?因为最终,我需要将一个文件夹(超过1GB)复制到许多计算机,瓶颈是我需要读取源文件的部分.
那么,甚至可以实现吗?
我有一台2 GB的机器.在运行我的exe之前,我有1.1 GB的可用内存.当我运行下面只能找到一行的exe时,我就会出现内存异常.
我期待以下行使用大约6亿字节的内容.MemoryStream类使用的内存多于初始化容量吗?
MemoryStream memory = new MemoryStream(600000000);
Run Code Online (Sandbox Code Playgroud) 我如何获得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) 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#中的等价物吗?我到处搜索但根本找不到答案.
提前致谢.
我试图获取一个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)
但我不知道接下来会发生什么.或者即使这是解决这个问题的正确方法.有人能帮忙吗?
我能够通过邮件发送附件,但附件内容为空白,大小显示为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) 我正在使用以下代码计算对象(正在填充的列表)的大小:
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)
并且它似乎随着流内容的增加而增加。那么在这种情况下容量的目的是什么?
memorystream ×10
c# ×8
.net ×3
java ×2
bytebuffer ×1
capacity ×1
copy ×1
email ×1
excel ×1
file-copying ×1
file-io ×1
gzipstream ×1
idisposable ×1
memory ×1
streamreader ×1