我使用 Ruby 读取图像文件并将其保存到字符串中。
partial_image100 = File.read("image.tga")
partial_image99 = File.read("image.tga")
partial_image98 = File.read("image.tga")
...
我在分布式系统的一端读取这些图像。在另一个系统中,我想做一个 Tail 操作。系统只接收图像。
我有大约 100 个部分图像。我想做一个尾巴操作,像这样:
tail -c +19 image100 >> image99
tail -c +19 image99 >> image98
tail -c +19 image97 >> image96
...
基本上它只是删除部分图像的前 18 个字节,并将剩下的内容附加到下一个图像。
问题是这很慢。从 Ruby 调用 100 个 unix 命令很慢。我想重构它,以便在 Ruby 世界中发生这种情况。只是在记忆中。没有文件。
我怎样才能在 Ruby 中做到这一点?
谢谢
编辑:
图像存储在这样的哈希中:
{"27"=>"\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000E\u0001\xD0\a\xD0\a\u0018 \xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF\u0000\xFF\xFF...
编辑:
您在这里拥有所有相关代码: https ://gist.github.com/989563
有两个文件。文件中以 json 编码的代码和哈希对象。运行代码时,将在 /tmp 创建两个图像文件
- /tmp/image-tail-merger.tga – 尾部合并算法的输出
- /tmp/image-/time/.tga – 内存尾算法的输出
目前内存算法失败,因为生成的图像是毕加索。
如果您设法使内存中算法生成与尾合并算法相同的图像,那么您就成功了。
编辑:
我终于猜对了!!!