- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用 tcp/ip 套件。我正在编写一个程序来在发送方加密文件并在接收方解密。我在用网络流的长度初始化我的字节数组时遇到了这个异常。这是我的代码:
if (client.Connected)
{
NetworkStream binarystream = client.GetStream();
byte[] receivebytes = new byte[binarystream.Length];
binarystream.Read(receivebytes, 0, receivebytes.Length);
Stream file = File.OpenWrite(saveFileDialog1.FileName);
file.Write(receivebytes, 0, receivebytes.Length);
file.Close();
binarystream.Close();
}
控制层次确保 client.GetStream()
返回的流在构成二进制流实例之前已经被使用。我得到的异常是在包含以下内容的行中:
byte[] receivebytes = new byte[binarystream.Length];
表示流不支持seek操作。这是什么意思?
最佳答案
这是 Stream 的正常状态。您需要在脑海中将其建模为 Spring 的沙漠小河,像溪流一样滴流的水是滴流的字节。你不知道它什么时候会干涸,这需要天气预报忠实地预测何时会停止下雨。
这样的天气预报肯定存在。如果它实际上是一个 MemoryStream 就没有问题,它可以访问所有 字节,因此它可以可靠地告诉您它何时耗尽。或者一个 FileStream,现在操作系统的文件系统可以提供预测。文件数据的目录项记录了文件的长度。
TCP 流变得更加困难。 TCP 协议(protocol)本身根本不提供信息。您只能继续调用套接字的 Read() 方法,当它返回 0 时,您就知道雨停了。
这通常需要在 TCP 之上构建协议(protocol)。非常常见的 HTTP 协议(protocol)就是一个很好的例子。它确实为您提供了预测,它是HttpWebRequest.ContentLength .或者你自己制作,标准技术是让发送器首先写入 4 个字节,说明后面有多少数据。但是 NetworkStream 并不迎合特定的协议(protocol)实现,它模拟了一个通用的网络流。您必须自己添加天气预报。
关于c# - 为什么流不支持seek操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23321619/
如果我们查看 istream 和 ostream 的文档,我们有以下功能: istream& seekg ( streampos pos ); istream& seekg ( streamoff o
如果我想实现 seek() 来完成 SeekableIterator 接口(interface),如果搜索的位置无效,我是否应该在内部恢复到旧位置?像这样: public function seek(
python documentation说: In text files (those opened without a b in the mode string), only seeks relat
我正在编写一个 c++ 方法,需要更新打开文件 (ofstream) 中的一些字符。 该方法获取一个映射作为输入,其中键是一个偏移量(文件中的位置),值是一个字符。 代码示例 typedef map
我注意到,当我做这样的事情时: with open('testfile', 'wb') as fl: fl.seek(2048*512) fl.write(b'aaaaa') 无论我的
我正在开发一个 android 应用程序,我想在状态栏中添加音量控制。我可以在状态栏中添加一个搜索栏吗? 我使用过 NotificationManager,我发现在通知栏中添加动画很困难。 但是任何人
我注意到,当我做这样的事情时: with open('testfile', 'wb') as fl: fl.seek(2048*512) fl.write(b'aaaaa') 无论我的
Python seek()函数:设定读写位置 可以使用 seek() 函数调整当前读写文件的位置。例如,我们从文件头部读取了 1000 个字节,处理这 1000 个字节后发现还有一个很重要的信息在文件
我在 Delphi 2006 中使用 TFileStream。当我使用超出范围的偏移量调用 TFileStream.Seek 时,我得到不同的返回值。当我寻找低于流开头的位置时,该函数返回 -1,如果
我们刚刚在 Delphi 2007 中遇到了 TFileStream.Seek 的一种特殊行为(实际上该方法是从 THandleStream 继承的): 您可以在没有错误的情况下查找文件末尾之外的内容
这是取自 https://forums.embarcadero.com/message.jspa?messageID=219481 的代码片段 if FileExists(dstFile) then
我有一个电子表格,其中包含大量输入,但只有一个输出(价格)。 我想让 Excel 自动更新其中一个输入(称为输入 1),以便在调整其他输入的同时保持价格不变。 我知道“目标搜索”可以做到这一点,但我不
根据 API ,这些是事实: seek(long bytePosition)方法简单来说就是将指针移动到用 bytePosition 指定的位置参数。 当 bytePosition大于文件长度,则文件
我们正在使用 StreamingKit (https://github.com/tumtumtum/StreamingKit) 从流式 m4a 音频源列表中播放,用户可以在这些音频源之间自由来回移动。
我有一个程序可以替换文件中的内容。但是却导致了IO异常,我不知道我哪里逻辑错了? 代码如下: import java.io.File; import java.io.RandomAccessFile;
我想从Excel中导出数据 我尝试下面的代码 def exel_all_attendance(request,course_id): all_submit_attendance = Submi
我正在尝试使用 FileStream。寻求快速跳转到一行并阅读它。 但是,我没有得到正确的结果。我试图看这个有一段时间了,但不明白我做错了什么。 环境: 操作系统:Windows 7 架构:.NET
我正在处理大文件,从 10Gb 开始。我正在将文件的各个部分加载到内存中进行处理。以下代码适用于较小的文件 (700Mb) byte[] byteArr = new byte[layerPixelC
我有一个 for 循环,它被设计为接受一个目标数字,并循环遍历堆栈,直到它在堆栈 [target] 中找到数据并且它应该返回该数据。 不幸的是,我只能让它返回它所在的数组的位置或一串随机数字(随着我的
我创建了一个包含以下条目的文件,由 file.read() 返回 'abcd\nefgh\n1234\nijkl\n5678\n\nend' 我现在打开要阅读的文件,使用“f”作为处理程序。f.rea
我是一名优秀的程序员,十分优秀!