我有一个方法接收使用BinaryWriter在其上写入的Stream.但是当我处理这个BinaryWriter时,它也会关闭流.我可以不妥协地把它留下来让我可以打开我的小溪吗?
如何使用BinaryWriter将相当复杂的结构序列化为byte []数组?
更新:
为此,必须使用[Serializable]属性修饰每个结构(和子结构?).
我不需要实现ISerializable接口,因为它旨在通过自己的序列化来控制对象.
我正在调试将一个对象的片段写入文件的一些问题,我已经找到了打开文件并在其中写入"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角色.
我在我的代码中使用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?为什么?
BinaryReader/BinaryWriter可以通过指定Encoding使用for String-related操作来构造.NET 类.
我正在使用扩展方法实现自定义字符串格式,但是Encoding在实例化时它们会以尊重指定的方式实现它们BinaryReader/Writer.
似乎没有办法从读取器/写入器中检索编码,即使从类继承也没有.我只能通过重新创建所有构造函数来继承它们来拦截传递的编码.我查看了.NET源代码,它只用于实例化Decoder类(如果是BinaryReader),但我也无法访问它.
我在这些课程中是否会遇到缺点?我可以用反射入侵它们吗?
我正在将原始字节值写入文件:
我已经尝试过更改编码格式等,但没有成功.
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.
我正在研究基于位的B/W/Greyscale预编译字体格式,并且在阅读或编写格式时遇到了问题,(我无法确定问题的位置.(我确实有基于B/W位的版本工作,但是别名字体看起来不太好,正如您可以想象的那样,特别是在使用320x200像素屏幕时))但是决定只使用BinaryWriter比写入更容易当我拉动图像数据时,一个bool [].
文件中像素的基本格式如下所示:
1 - 白色像素(最短,因为这将是大多数像素)
00 - 黑色像素(无理由为纯黑色像素写入10位,其中有合理的数量)
01 - 灰度像素,后跟1个字节,描述像素的阴影
现在,编写所需信息的一切都很好,花花公子,因为这是全部字节,但默认的.Net 4.0 BinaryWriter将布尔值写为完整字节,并且可以想象,这会否定基于位的使用格式.所以我想知道,有没有BinaryWriter,(和BinaryReader)实现那里的基于位的
编辑:我最终创建了自己的.(请参阅代码的答案.)
ASCII(StreamWriter)中每个字符的大小取1字节,无论是数字还是字符.
同样,每个字符的大小,二进制的整数是多少?(BinaryWriter).有人可以简单解释一下吗?
我正在编写处理使用哈希的文件的代码。我需要读取一个块,然后对其进行哈希处理,然后写入它,然后读取另一个块,等等。
换句话说,我需要做大量的阅读和写作。我确信这真的很简单,但我只是想由专业人士运行它......
是否可能并且可以接受执行以下操作:
BinaryReader br = new BinaryReader (File.OpenRead(path));
BinaryWriter bw = new BinaryWriter (File.OpenWrite(path));
br.dostuff();
bw.dostuff();
Run Code Online (Sandbox Code Playgroud)
我记得在尝试打开和写入文件时遇到了某种冲突的文件流错误,并且我不确定我做了什么来获得它。问题是两个文件流吗?我可以有一个流来读取和写入吗?
我有一个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,我认为它可以而且应该是异步的.
我试着写一个MemoryStream与BinaryWriter和时完成我复制MemoryStream到FileStream用CopyToAsync,然而这引起性能下降(总时间)高达100%的大文件.
如何将整个操作转换为异步?
binarywriter ×10
c# ×10
.net ×5
binaryreader ×3
filestream ×2
async-await ×1
binary ×1
endianness ×1
file ×1
size ×1
stream ×1