标签: memorystream

带MemoryStream问题的BinaryFormatter

我正在测试BinaryFormatter,看看它对我有用,我有一个简单的问题:

当它与字符串HELLO一起使用时,我将MemoryStream转换为数组,它给出了29个维度,其中五个是维度末尾的实际数据:

            BinaryFormatter bf = new BinaryFormatter();

            MemoryStream ms = new MemoryStream();

            byte[] bytes;
            string originalData = "HELLO";

            bf.Serialize(ms, originalData);
            ms.Seek(0, 0);

            bytes = ms.ToArray();
Run Code Online (Sandbox Code Playgroud)

回报

-       bytes   {Dimensions:[29]}   byte[]
        [0] 0   byte
        [1] 1   byte
        [2] 0   byte
        [3] 0   byte
        [4] 0   byte
        [5] 255 byte
        [6] 255 byte
        [7] 255 byte
        [8] 255 byte
        [9] 1   byte
        [10]    0   byte
        [11]    0   byte
        [12]    0   byte
        [13]    0   byte
        [14]    0   byte
        [15]    0   byte
        [16]    0 …
Run Code Online (Sandbox Code Playgroud)

c# memorystream binaryformatter

6
推荐指数
1
解决办法
7367
查看次数

MemoryStream必须明确处理?

由于MemoryStream是一个非托管资源,它总是必须处理?

鉴于:

1) A method is invoked.
2) A MemoryStream object is created (MemoryStream ms = new MemoryStream();).
3) An exception occurs and is caught from the invoking classes.
Run Code Online (Sandbox Code Playgroud)

因此,MemoryStream对象上的引用将丢失.这种情况需要try/finally-block(或using语句)吗?

.net dispose memorystream

6
推荐指数
2
解决办法
2473
查看次数

C#将MemoryStream转换为FileStream

我的代码是这样的:

byte[] byteArray = Encoding.ASCII.GetBytes(someText);
MemoryStream stream = new MemoryStream(byteArray);
StreamReader reader = new StreamReader(stream);
FileStream file = (FileStream)reader.BaseStream;
Run Code Online (Sandbox Code Playgroud)

后来我正在使用file.Name.

我收到一个InvalidCastException:它显示如下

无法将类型为"System.IO.MemoryStream"的对象强制转换为"System.IO.FileStream".

我在某处读到了我应该将FileStream更改为Stream.还有什么我应该做的吗?

c# memorystream stream filestream

6
推荐指数
2
解决办法
8657
查看次数

在C#中将任意类型实例写入MemoryStream

在Delphi中,可以执行以下操作:

var
  ms  : TMemoryStream;
  i   : Integer;
begin
  ms := TMemoryStream.Create;
  i := 1024;
  ms.Write(@i, SizeOf(Integer));
  ms.Free;
end;
Run Code Online (Sandbox Code Playgroud)

这会将i的内存内容写入ms.

MemoryNet的.Net版本没有这样的功能(托管版本和非托管版本).我知道.Net在这方面与Delphi的原理不同.

如何在C#中做到这一点?我对"最佳实践"和最快的方法感兴趣.

.net c# serialization memorystream c#-4.0

6
推荐指数
2
解决办法
3762
查看次数

MemoryStream并构造一个字节数组

我正在使用MemoryStream来构造我需要发送到服务器的字节数组.我有以下问题:

1)有没有比这更好的方法来构造一个字节数组?

2)为什么这些代码会在我的内存流中写出伪造的?

var
  serial : word;
  MS : TMemoryStream;
const
  somebytes : array [0..1] of byte = ($72,$72);
...
begin
      MS := TMemoryStream.Create();
      try
      MS.Write(somebytes[0],2);
      serial := $3E6C;
      MS.Write(serial,2);
      finally
      MS.Free;
end;
Run Code Online (Sandbox Code Playgroud)

使用调试器,我看到在流中添加了值$ 6F32而不是$ 3E6C.

3)如果我打电话

MS.Position := 2;
Run Code Online (Sandbox Code Playgroud)

然后我访问PByte(MS.Memory)^为什么我得到流中的第一个字节而不是第三个字节?

delphi memorystream

6
推荐指数
1
解决办法
3884
查看次数

将float转换为二进制表示(使用MemoryStream?)

我想将一个给定float转换为二进制表示.我试图将浮点值写入a MemoryStream,MemoryStream逐字节读取该字节并将字节转换为其二进制表示.但每次尝试都失败了.

  • "无法读取封闭的流"(但我只关闭了作者)
  • 出于测试目的,我简单地写了一个整数(我认为大小为4个字节)MemoryStream,当我没有刷新时为0 的长度,而当我做的时StreamWriter,为1.

我确信有一种更好的方法可以将floats 转换为二进制,但我也想了解一下这个MemoryStream类.

c# binary memorystream floating-point-conversion

6
推荐指数
2
解决办法
9625
查看次数

.Net流:返回与提供

我一直想知道Stream在C#.Net中使用类的最佳实践是什么.提供已写入或提供的流是否更好?即:

public Stream DoStuff(...)
{
    var retStream = new MemoryStream();
    //Write to retStream
    return retStream;
}
Run Code Online (Sandbox Code Playgroud)

而不是;

public void DoStuff(Stream myStream, ...)
{
    //write to myStream directly
}
Run Code Online (Sandbox Code Playgroud)

为了生命周期控制,我总是使用前一个例子,但我有这种感觉,Stream因为缺少一个更好的词,这是一种"流式传输"的糟糕方式.

.net c# memorystream stream

6
推荐指数
2
解决办法
378
查看次数

将内存流写入文件

我已经尝试将json格式的数据检索为字符串并将其写入文件,并且效果很好.现在我正在尝试使用MemoryStream来做同样的事情,但没有任何东西被写入文件 - 仅仅是[{},{},{},{},{}]而没有任何实际数据.

我的问题是 - 如何检查数据是否确实正确地进入内存流,或者问题是否发生在其他地方.我知道myList确实包含数据.

这是我的代码:

MemoryStream ms = new MemoryStream();
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(List<myClass>));
dcjs.WriteObject(ms, myList);

using (FileStream fs = new FileStream(Path.Combine(Application.StartupPath,"MyFile.json"), FileMode.OpenOrCreate))
{
                ms.Position = 0;
                ms.Read(ms.ToArray(), 0, (int)ms.Length);
                fs.Write(ms.ToArray(), 0, ms.ToArray().Length);
                ms.Close();
                fs.Flush();
                fs.Close();
 }
Run Code Online (Sandbox Code Playgroud)

c# json memorystream

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

如何将包含PDF文件数据的两个内存流合并为一个

我试图将两个PDF文件读入两个内存流,然后返回一个包含两个流数据的流.但我似乎不明白我的代码有什么问题.

示例代码:

string file1Path = "Sampl1.pdf";
string file2Path = "Sample2.pdf";
MemoryStream stream1 = new MemoryStream(File.ReadAllBytes(file1Path));
MemoryStream stream2 = new MemoryStream(File.ReadAllBytes(file2Path));
stream1.Position = 0;
stream1.Copyto(stream2);
return stream2;   /*supposed to be containing data of both stream1 and stream2 but contains data of stream1 only*/  
Run Code Online (Sandbox Code Playgroud)

c# memorystream itextsharp

6
推荐指数
2
解决办法
8925
查看次数

使用MemoryStream和ZipArchive将zip文件返回到asp.net web api中的客户端

我试图使用以下代码将zip文件从asp.net web api返回给客户端:

private byte[] CreateZip(string data)
{
    using (var ms = new MemoryStream())
    {
        using (var ar = new ZipArchive(ms, ZipArchiveMode.Create, true))
        {
            var file = archive.CreateEntry("file.html");

            using (var entryStream = file.Open())
            using (var sw = new StreamWriter(entryStream))
            {
                sw .Write(value);
            }
        }
        return memoryStream.ToArray();
    }
}

public HttpResponseMessage Post([FromBody] string data)
{
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new ByteArrayContent(CreateZip(data));
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip, application/octet-stream");
    return result;
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到以下错误:

ExceptionMessage":"值'application/zip,application/octet-stream'的格式无效."

这是JS代码:

$.ajax({
  type: "POST",
  url: url,
  data: …
Run Code Online (Sandbox Code Playgroud)

c# ajax memorystream ziparchive asp.net-web-api

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