代码之家  ›  专栏  ›  技术社区  ›  Joel

streamreader readblock挂起二进制文件

  •  2
  • Joel  · 技术社区  · 14 年前

    我有一个小类接受来自包含文件上载的浏览器的帖子。我正在用一个streamreader读取它。我读了标题,然后当我到达正文时,我得到了内容长度,并创建了一个该大小的数组,然后 stream.ReadBlock() 关于:

    char[] buffer = new char[contentLength];
    stream.ReadBlock(buffer, 0, contentLength);
    String body = new string(buffer);
    

    当我运行这个并发布一个文本文件时,它工作正常。不过,我试过压缩文件和MP3文件,但都不管用。它只是挂在 流.readblock()) 打电话。

    我在Ubuntu10.04和Mono2.6.7上首次尝试了这个方法(我的MonoDevelopment项目设置为使用.net 3.5)。我刚刚通过在VisualStudio 2010和.NET 3.5中运行相同的项目验证了Windows7上发生的相同事情。我试过从火狐和Chrome发帖。

    有人知道为什么会发生这种事吗?谢谢。

    我还尝试使用BinaryReader而不是StreamReader:

    byte[] bytes = reader.ReadBytes(contentLength);
    

    但不管现在怎么办,它最终还是挂在了那个电话上。是因为我使用一个streamreader来读取文章的标题,然后使用binaryreader来读取正文吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Jon Skeet    14 年前

    StreamReader 是为了 文本 数据。你不应该在二进制数据上使用它-你应该使用 BinaryReader 或者只是 Stream .

        2
  •  1
  •   Mark    14 年前

    使用streamreader不适用于二进制文件。它会做各种文本编码的工作,而且通常(可能)会把事情搞砸。

    一旦确定要处理的文件是二进制的,就应该直接使用stream对象来读取(部分)文件。这样,你就不用处理编码把内容弄乱了。