标签: binarywriter

为什么BinaryWriter会在处置时关闭外部流,以及如何防止这种情况发生?(.NET C#)

我有一个方法接收使用BinaryWriter在其上写入的Stream.但是当我处理这个BinaryWriter时,它也会关闭流.我可以不妥协地把它留下来让我可以打开我的小溪吗?

.net c# stream binarywriter

30
推荐指数
4
解决办法
8014
查看次数

C#和.NET:如何使用BinaryWriter将结构序列化为byte []数组?

如何使用BinaryWriter将相当复杂的结构序列化为byte []数组?

更新:

  • 为此,必须使用[Serializable]属性修饰每个结构(和子结构?).

  • 我不需要实现ISerializable接口,因为它旨在通过自己的序列化来控制对象.

c# serialization binarywriter

17
推荐指数
3
解决办法
4万
查看次数

为什么BinaryWriter会在流的开头添加乱码?你怎么避免它?

我正在调试将一个对象的片段写入文件的一些问题,我已经找到了打开文件并在其中写入"TEST"的基本情况.我是这样做的:

static FileStream fs;
static BinaryWriter w;
fs = new FileStream(filename, FileMode.Create);
w = new BinaryWriter(fs);

w.Write("test");

w.Close();
fs.Close();
Run Code Online (Sandbox Code Playgroud)

不幸的是,这最终会在文件的前面添加一个框,它看起来像这样:

测试,前面有一个有趣的盒子.这是为什么,我该如何避免呢?

编辑:它似乎没有在这里显示框,但它是看起来像胡言乱语的unicode角色.

.net c# filestream binarywriter

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

C#BinaryWriter - 和endianness

我在我的代码中使用BinaryWriter,这是我的代码:

static void Main(string[] args)
{
    FileInfo file = new FileInfo(@"F:\testfile");
    if (file.Exists) file.Delete();
    using (BinaryWriter bw = new BinaryWriter(file.Create()))
    {
        ushort a = 1024;
        ushort b = 2048;
        bw.Write(a);
        bw.Write(b);
        bw.Write(a);
        bw.Write(b);
    }
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

但输出文件的十六进制是:

在此输入图像描述

在此输入图像描述

是不是0x0004 = 4?为什么?

c# endianness binarywriter

11
推荐指数
2
解决办法
4871
查看次数

获取BinaryReader/Writer的编码?

BinaryReader/BinaryWriter可以通过指定Encoding使用for String-related操作来构造.NET 类.

我正在使用扩展方法实现自定义字符串格式,但是Encoding在实例化时它们会以尊重指定的方式实现它们BinaryReader/Writer.

似乎没有办法从读取器/写入器中检索编码,即使从类继承也没有.我只能通过重新创建所有构造函数来继承它们来拦截传递的编码.我查看了.NET源代码,它只用于实例化Decoder类(如果是BinaryReader),但我也无法访问它.

我在这些课程中是否会遇到缺点?我可以用反射入侵它们吗?

.net c# binaryreader binarywriter

9
推荐指数
2
解决办法
1767
查看次数

值> 127时BinaryWriter.Write(字节值)问题

我正在将原始字节值写入文件:

  • 当值<= 127时,一切正常.
  • 但是如果一个字节大于127,它就会搞得一团糟.

我已经尝试过更改编码格式等,但没有成功.

public static void Generate()
{
    var fileName = "Test.bin";

    if (File.Exists(fileName))
        File.Delete(fileName);

    using (var binaryWriter = new BinaryWriter(File.Open(fileName, FileMode.Create)))
    {
        var byteArray = new byte[] {0x01, 0x02, 0x7F, 0x80};

        foreach (var b in byteArray)
        {
            binaryWriter.Write(b);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,生成的文件应该是:

01 02 7F 80
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

01 02 7F D0 90
Run Code Online (Sandbox Code Playgroud)

关于什么事情的任何线索?

这是一个测试应用程序:http: //pastebin.com/0Cfv3Snc

这是生成的文件:http: //postimg.org/image/55un9lar1/

我不在我的两台电脑上工作.在Windows 10上运行.NET 4.0.

.net c# binary file binarywriter

7
推荐指数
1
解决办法
127
查看次数

C#中基于位的BinaryWriter

我正在研究基于位的B/W/Greyscale预编译字体格式,并且在阅读或编写格式时遇到了问题,(我无法确定问题的位置.(我确实有基于B/W位的版本工作,但是别名字体看起来不太好,正如您可以想象的那样,特别是在使用320x200像素屏幕时))但是决定只使用BinaryWriter比写入更容易当我拉动图像数据时,一个bool [].

文件中像素的基本格式如下所示:

1 - 白色像素(最短,因为这将是大多数像素)

00 - 黑色像素(无理由为纯黑色像素写入10位,其中有合理的数量)

01 - 灰度像素,后跟1个字节,描述像素的阴影

现在,编写所需信息的一切都很好,花花公子,因为这是全部字节,但默认的.Net 4.0 BinaryWriter将布尔值写为完整字节,并且可以想象,这会否定基于位的使用格式.所以我想知道,有没有BinaryWriter,(和BinaryReader)实现那里的基于位的

编辑:我最终创建了自己的.(请参阅代码的答案.)

c# binarywriter

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

写入BinaryWriter时的类型大小

ASCII(StreamWriter)中每个字符的大小取1字节,无论是数字还是字符.

同样,每个字符的大小,二进制的整数是多少?(BinaryWriter).有人可以简单解释一下吗?

.net c# size binarywriter

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

二进制读取器和写入器同时打开?

我正在编写处理使用哈希的文件的代码。我需要读取一个块,然后对其进行哈希处理,然后写入它,然后读取另一个块,等等。

换句话说,我需要做大量的阅读和写作。我确信这真的很简单,但我只是想由专业人士运行它......

是否可能并且可以接受执行以下操作:

BinaryReader br = new BinaryReader (File.OpenRead(path));
BinaryWriter bw = new BinaryWriter (File.OpenWrite(path));
br.dostuff();
bw.dostuff();
Run Code Online (Sandbox Code Playgroud)

我记得在尝试打开和写入文件时遇到了某种冲突的文件流错误,并且我不确定我做了什么来获得它。问题是两个文件流吗?我可以有一个流来读取和写入吗?

c# filestream binaryreader binarywriter

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

在异步代码中使用BinaryWriter或BinaryReader

我有一个float写入文件的列表.下面的代码做了事情,但它是同步的.

List<float> samples = GetSamples();

using (FileStream stream = File.OpenWrite("somefile.bin"))
using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.Default, true))
{
    foreach (var sample in samples)
    {
        binaryWriter.Write(sample);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想异步操作但BinaryWriter不支持异步操作,这是正常的,因为它每次只写几个字节.但大多数情况下,操作使用文件I/O,我认为它可以而且应该是异步的.

我试着写一个MemoryStreamBinaryWriter和时完成我复制MemoryStreamFileStreamCopyToAsync,然而这引起性能下降(总时间)高达100%的大文件.

如何将整个操作转换为异步?

c# binaryreader binarywriter async-await

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