问题标签 [tstream]
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.
delphi - Delphi idtcpserver idtcpclient tstringstream 到字符串
我尝试从 tidtcpserver 向 Delphi 中的 tidtcpclient 发送一个字符串,但是当我发送一个字符串时,客户端什么也没有收到。我没有收到任何错误。我正在使用 tstringstream,因为我想发送一个 base64 字符串(writeln/readln 无法发送/接收那么多文本)这是 idtcpserver1 中的发送代码:
这是 idtcpclient1 中的读取代码
有谁知道我做错了什么?
c++ - 加载内存流时访问冲突
请帮忙,我不知道我做错了什么。
我正在开发一个从服务器机器检索文件的应用程序,用于自动更新客户端机器。这就是我想出的:
所以我想知道为什么这段代码有效,但只在第一次迭代时才有效。查询结果是对的,代码加载和保存都正常,但只针对que查询的第一个结果。解决这个问题的方法会很好。
delphi - TStream 作为 StringList 中的对象
我正在使用 Delphi 7 并使用 StringList,以 TStream 作为对象。
我的测试项目有一个 ListBox、一个备忘录和 2 个按钮(添加和删除)。
这是我到目前为止得到的:
当我双击 ListBox 时,我想将所选项目 Stream 对象加载到备忘录。这是我试图做的:
我的问题是:
我在 StringList 中添加和删除(释放)TStream 对象的方式是否正确?也许我需要先释放流然后释放对象?
我在 FormDestroy 事件上释放所有对象的方式是否正确?
当我尝试将流加载回备忘录 (Memo.Lines.LoadFromStream(TStream(List.Objects[Idx]))) 时,它不会加载,尽管 Stream.Size 大于零。我做错了什么?
delphi - 使用 TStream 从 http 服务器读取自定义流时的随机延迟
我正在使用 TIdHttp(来自 Indy 组件)连接到支持 Sony Remote Api 的相机。摄像机将实时取景流作为 HTTP GET 命令的响应发送到 http 连接。我编写了一个 TStream 子类并将其用作流类。这是我连接到直播的代码:
TLiveStream 类的定义如下:
程序正在成功连接到实时流并开始接收来自摄像机的实时视图。但它会随机停止从相机接收任何东西五秒钟(程序空闲并且不会冻结)。我用ICS的THttpCli 替换了 TIdHttp,但问题没有解决。
任何帮助将不胜感激!
编辑:
我使用 curl 工具找出问题是否在我的程序中,但问题仍然存在。我嗅探相机和PC之间传输的数据包,这是延迟时间的截图:
c++ - 将 TStringList 写入 TStream 时的歧义
我正在开发一个使用流在客户端之间发送数据的项目。它实现了一堆流操作符来支持这一点。它运行良好,C++ Builder 2010
但现在我将项目移动到C++ Builder 10 Seattle
我得到一个奇怪的错误。
在一个函数TStream
中创建 a 并将数据写入其中
m_pIPAddressFilter
这是一个TStringList
,错误与此有关。它读到
[bcc32 错误] E2015 在 Common\Streams.h:28 处的 '>>(System::Classes::TStream &,bool &) 和 '>>(System::Classes::TStream &,System::Classes 之间存在歧义::TStrings *) 在 Common\Streams.h:42'
它所指的实现的流运算符看起来像这样
编译器怎么会被这个弄糊涂,觉得应该用取abool
还是取版本是模棱两可的TStrings
。甚至是正在写入流TStrings
的父类。TStringList
如前所述,这在C++ Builder 2010
.
delphi - 如何使用在 Windows 剪贴板中复制的文件加载流
我已将文件复制到 Windows 剪贴板中(只需单击右键,复制)。我想TStream
用当前存储在剪贴板中的文件加载后代。
copy - 在 Lazarus 中克隆/复制/复制流
我开发了一个接收 TStream 的程序;但基本类型,允许发送所有类型的流继承者。
此过程旨在为每个内核或多个线程创建一个线程。每个线程都会对流数据进行详细分析(只读),并且由于 Pascal 类是通过引用分配的,而不是按值分配的,因此会有线程冲突,因为读取位置是 intercalará。
为了解决这个问题,我希望该过程完成所有工作,将内存中的最后一个 TStream 加倍,并为其分配一个新变量。这样我可以复制足够数量的 TStream,以便每个线程都有一个唯一的 TStream。非常线程库内存结束后。
注意:程序在 DLL 中,线程工作。
注2:目标是程序做所有必要的服务,即在没有代码干预的情况下调用;您可以轻松地传递一个TStream 数组,而不仅仅是一个 TStream。但我不想要它!目的是服务完全由程序提供。
你知道怎么做吗?
谢谢你。
添加:
我有一个低级的想法,但我对 Pascal 的了解是有限的。
- 确定对象在内存中的地址及其大小。
- 在内存中创建一个与原始对象大小相同的新地址。
- 将整个内容(原始)对象复制到这个新地址。
- 我创建了一个指向 TStream 的指针,它指向内存中的这个新地址。
这会起作用,还是愚蠢?如果是,如何操作?请举例!
2º 加法:
举个例子,假设程序对加密流执行暴力攻击(只是一个例子,因为它不适用):
场景:一个 8 核 CPU 中的 30GB 文件:
1º - TMemoryStream:
创建 8 个 TMemoryStream 并为每个 TMemoryStreams 复制文件的全部内容。这将导致同时使用 240GB RAM。我考虑了这个错误的想法。此外,它会将处理时间增加到最快的程度,而不使用多线程。我将不得不将整个文件读入内存,然后加载,开始分析它。坏了!
* TMemoryStream 的一个不好的替代方法是将文件慢慢复制到 TMemoryStream 中,以 100MB/核心(800MB)为单位,而不是占用内存。所以每个线程看起来只有 100MB,释放内存直到你完成整个文件。但问题是它需要 DLL 中的 Synchronize() 函数,我们知道这不起作用,因为我在Synchronize() 中打开问题 DLL 冻结而没有错误和崩溃
2º - TFileStream:
这在我看来更糟。看,我得到一个 TStream,创建 8 个 TFileStream 并为每个 TFileStream 复制所有 30GB。这很糟糕,因为在磁盘上占用了 240GB,这对于 HDD 来说也是一个很高的价值。HD中的读写时间(复制)将使多线程的实现比单线程更耗时。坏了!
结论: 上述两种方法都需要使用 synchronize() 将每个线程排队以读取文件。因此,即使在多核 CPU 上,线程也不会同时运行。我知道即使他可以同时访问文件(直接创建几个TFileStream),操作系统仍然enfileiraria线程一次读取文件,因为HDD不是真正的线程安全,他不能读取两个数据同时 。这是硬盘的物理限制!但是,与我手动实现 synchronize() 不同,OS 的排队管理更加有效,并有效地减少了潜在瓶颈。这证明了我克隆 TStream 的想法是合理的,它将留下所有管理文件访问队列的工作;没有任何干预——我知道他会比我做得更好。
例子
在上面的例子中,我想让 8 个线程同时不同地分析同一个 Stream,知道线程不知道提供了什么样的 Stream,它可以是一个文件 Stream,一个来自互联网的流,甚至是一个小的 TStringStream。主程序将只创建一个Strean,并带有配置参数。一个简单的例子:
例如,应该可以只分析流 M1,只分析 M2,或同时分析 [M1,M2]。TModesFB 组合改变了流的分析方式。数组“modes”中的每个项目,作为一个任务列表,将由不同的线程处理。任务列表示例(JSON 表示):
注意:在分析仪 [m1] + [m2] <> [m1, m2]。
在程序中:
在 DLL 中:
注意:使用单线程程序运行良好,没有已知错误。
我希望每个线程都负责一种分析,并且我不能在 DLL 中使用 Synchronize()。理解?有足够干净的解决方案吗?
delphi - 在将图像保存/加载到/从流中时,delphi 出现访问冲突错误
我正在用delphi开发一个应用程序。我正在尝试提取保存在数据库中的图像,将其保存到TMemoryStream
并加载相同的图像,并将其TImage
放置在将动态填充的其他表单上的控件上。当我尝试将图像从流加载到放置在表单上的图像控件时,出现访问冲突错误。
错误描述如下
模块 abc.exe 中地址 00B548C 的访问冲突。读取地址 0000000
我的代码片段如下
delphi - 我如何从 TFileStream 和 TMemoryStream 下降?
我有一个从 TFileStream 继承的类和一个从 TMemoryStream 继承的类。两者都实现了与读取数据完全相同的功能,例如:
当我想编写一个可以将任一类型的流作为参数的函数时,我必须使用 TStream:
这当然意味着我不能使用我的自定义函数。处理这个问题的最佳方法是什么?理想情况下,我希望能够拥有一个在 FileStream 或 MemoryStream 上工作的 Tstream 兼容类,这样我就可以做这样的事情,并且流是 FileStream 还是 MemoryStream 无关紧要:
delphi - Delphi tstream:创建时的奇怪行为
我是德尔福的新手。在 TStrem 类的文档中,我读到它是一个抽象类。所以我认为当我尝试创建它时编译器出错了
为什么不?