问题标签 [binarywriter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3781 浏览

c# - 带有简单 BinaryWriter 和 BinaryReader 的 EndOfStreamException

我正在使用以下代码:

但是我收到以下异常:

在读取之前,binaryReader.BaseStream.Length大于 0,但binaryReader.PeekChar()返回 -1。

我究竟做错了什么?

0 投票
2 回答
1208 浏览

c# - 在读/写操作期间无法访问关闭的文件 - C#

我搜索了互联网并查看了很多帖子,但没有一个对我有帮助。所以我决定在这里问我自己的问题。

单击表单上的保存按钮时,我正在将一些数据写入二进制文件,并在从表单打开文件时从文件中读取该数据。数据包括来自一些文本框和两个列表的文本。我创建了一个保存方法,它具有以下代码:

我有另一种通用方法来编写具有以下代码的列表:

因为我有两个列表,所以我将这两行添加到 Save 方法的writer.Close()行之前,将第一个代码更改为:

问题是,当代码到达 时R.Write(Nrows);,它会抛出ObjectDisposedException并说它无法访问已关闭的文件。是什么导致文件此时关闭?以及如何防止文件关闭?

当阅读作为阅读使用与写作相同的模式时,也会出现同样的问题。

0 投票
1 回答
341 浏览

c# - C#中的Matlab fwrite

我有一段代码正在尝试用 C# 实现。frwite该代码使用 Matlab的命令写入文件。我尝试查看文档并做一些示例以了解其frwite工作原理。我尝试了以下但没有成功。

这是代码:

使用 fread() 输出:

我尝试在 C# 中实现类似的代码:

在 Matlab 中使用 fread() 输出:

如果有人可以帮助我映射fwriteC# 中的功能。

0 投票
0 回答
74 浏览

java - Java - 编写一个以 7 位编码长度为前缀的字符串

我正在尝试在 Java 中的字符串上重新创建 C# 的 BinaryWriter 的 Write 函数。
C# 方法写入以 7 位格式编码的字符串长度,然后写入字符串。有什么办法可以在 Java 中实现吗?
我试过像这样实现它,但没有成功:

0 投票
2 回答
632 浏览

c# - 简单的二进制读写器代码不起作用

MS VS 2010, XNA 4.0
所以,我有一个类 Planet,它有保存和加载功能。

这很容易理解,不是吗?
现在,当我尝试为行星动画加载精灵时,我收到一个错误,上面写着:
“值不能为空。
参数名称:assetName”
,这发生在
this.planet = new Animation(Cont.Texture2D(br .ReadString()), br.ReadInt32(), br.ReadInt32(), (float)br.ReadDecimal(), true);
Cont.Texture2D 是一个静态函数,它返回一个 Texture2D 女巫名称等于它加载的路径,它看起来像这样:

所以,当我保存它时,它会保存正确的路径。测试函数如下所示:

“测试”只是一个测试字符串。现在,我首先执行注释代码,以便保存文件,然后执行未注释代码。这个行星构造函数只调用 LoadFromFile 函数,仅此而已。另外,我的项目内容中有保存的文件。我确实说过将该文件视为内容(不要编译它)。因此,代码“看到”了文件,这就是舒尔,但它无法在从 mars.planet 读取的路径上找到 .png。如果我一个接一个地存储 2 个字符串,然后读者看不到第一个字符串的结尾在哪里,可能会有错误吗?我可能保存错了吗?

我的目标是拥有将被加载和保存的二进制文件,其中包括行星、火箭、地图等,

0 投票
0 回答
72 浏览

serialization - 使用 BinaryWriter 序列化锯齿状数组的有效方法

stackoverflowers。

我基本上想知道是否有人对我应该如何继续进行提示。我已经在使用 BinaryWriter 序列化常规原始类型(通过长度前缀字节数组)。通常我只会将另一个实体添加到我拥有的原始类型字典中,但我希望能够序列化一个不确定的锯齿状数组;不管是System.Byte[][]不是System.Byte[][][][][][]

我需要一种方法来为所有数组的长度加上前缀,还需要一种方法来告诉反序列化器有多少个数组。

我只是在想一个好方法来做到这一点,但我整天都在尝试。

只是我想出的一个片段(它根本不完整,但也许你明白我的概念方法);

希望看到您参与讨论,并且我们可能会提出解决方案。

0 投票
2 回答
735 浏览

c# - 二进制写入器/读取器额外字符

我正在将一些遗留的 VB6 代码转换为 C#,这让我有点困惑。VB6 代码将某些数据顺序写入文件。该数据始终为 110 字节。我可以在转换后的代码中很好地读取这个文件,但是当我从转换后的代码编写文件时遇到了问题。

这是我在 LINQPad 中快速编写的精简示例:

如您所见,我首先编写了一个 30 个字符的字符串。该字符串永远不会超过 30 个字符,如果它更短,则用空格填充。之后,写入 20 个 32 位整数。它始终是 20 个整数。所以我知道字符串中的每个字符都是一个字节。我知道一个 32 位整数是四个字节。所以在我的阅读器示例中,我应该能够查找 110 个字节( 30 + (4 * 20) ),读取 30 个字符,然后读取 20 个整数,这就是我的数据。但是,由于某种原因,在字符串之后写入了额外的 4 个字节。

我是否只是遗漏了一些完全明显的东西(通常是我自己的情况)?字符串在 .Net 中不是以 null 结尾的,无论如何这是四个字节,而不仅仅是一个额外的字节?那么这额外的 4 个字节是从哪里来的呢?我没有直接调用 Write(string) 所以它不能是前缀长度,这显然不是因为它在我的字符串之后。如果取消注释 ReadInt32(),它将产生所需的结果。

0 投票
1 回答
1769 浏览

c# - C# 二进制写入器 ushort 字节顺序

我有一个用 D 编写的服务器端应用程序,我的客户端应用程序是用 C# 编写的。我使用 BinaryWriter 在它们之间进行通信,但是字节顺序有问题。

实际上字节的顺序是不一样的,例如:

C#客户端:

客户端输出:

服务器输出:

对于客户端,前 2 个字节已被反转,并且我的服务器应用程序中的字符串被编码ushort为长度,可以“修改” BinaryWriter 的行为还是我必须创建自己的实现?

编辑:服务器端数据包序列化程序:https ://github.com/Adwelean/EmperadorServer/blob/master/source/vendor/cerealed/cerealiser.d

0 投票
2 回答
3321 浏览

c# - 在 C# 中使用 BinaryWriter 将文件添加到 zip 文件时内存不足

我正在尝试将文件添加到 Zip 文件中,同时保留目录。只要我没有要压缩的 100 Mb 文件,下面的代码基本上就可以工作。如果我只是压缩一个包含 1 个大约 250 Mb 文件的目录(顺便说一句,在具有大量内存的系统上),我会得到一个 OutOfMemory 异常write.Write()

我已经修改了代码以分块读取,因为它在我读/写整个文件时第一次失败。不知道为什么还是失败?

编辑:Arkadiusz K 是对的,我在阅读器上使用了同花顺,而不是作者。更改后,该程序将 1 Gb 或更大的文件压缩到它首先停止在 100 Mb 的位置。但是,当我尝试压缩例如 6 Gb 文件时出现另一个异常 - 它停止于: System.IO.IOException is unhandled Stream is too long Source=mscorlib StackTrace: at System.IO.MemoryStream.Write(Byte[] buffer , Int32 偏移量, Int32 计数) (等)

有谁知道为什么它仍然失败?我会说代码现在应该一次正确地读取和写入 1 Kb?

0 投票
2 回答
1963 浏览

c# - Using BinaryReader/BinaryWriter to build a chat

Hello I'm trying to build a chat using BinaryReader/BinaryWriter, I came into a dead end where I can't figure out how do I make my server send the message to all connected clients..

I have tried adding all clients to a list and running foreach loop on the list to send the message to every connected client, that didn't workout..

Server:

Client: